FateTell
Server Details
Deterministic BaZi (Four Pillars) charts, Chinese almanac and saved FateTell charts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- RussGuo/fatetell-mcp
- GitHub Stars
- 1
- Server Listing
- FateTell MCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 9 tools
Each tool has a clearly distinct scope (cast vs. saved chart vs. almanac vs. judgment vs. calendar vs. daily fortune vs. account), and descriptions go out of their way to name the sibling tool to use instead in every ambiguous case. The trickiest overlap — get_bazi_judgment's optional birth/chart_id vs. get_saved_chart already containing the judgment — is explicitly resolved in the text.
All nine names are snake_case verb_noun (cast_/create_/get_/list_ + resource), with resources named consistently (saved_chart, bazi_chart, chart_calendar). The single 'cast' verb is semantically motivated by astrology and does not break predictability.
Nine tools is well within the ideal range and each maps to a distinct capability: compute, persist, list, read, judge, calendar, daily fortune, almanac, account. No redundant or filler tools are present.
The lifecycle for saved charts is covered on the create/list/read side, plus derived tools for judgment, calendar and daily fortune, and account/quota introspection. The main gap is no delete or update operation for saved charts, so an agent cannot remove duplicates or correct a saved birth record.
Available Tools
9 toolscast_bazi_chartCast BaZi chartARead-onlyIdempotentInspect
Compute a BaZi chart from birth data: pillars with Ten Gods, hidden stems, Na Yin, Day Master, all luck pillars, palaces and today's pillars; southern-hemisphere births use cross-region rules. Use for a birth not saved in FateTell, e.g. "What is my BaZi? Born 1990-05-17 08:30 in Taipei". Not for a saved chart (get_saved_chart already has its pillars, luck pillars and judgment; do not rebuild its birth data for this), Day Master strength (get_bazi_judgment), calendar (get_almanac), Western astrology, or predicting events or years of accident, illness or death. Deterministic; nothing stored.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | Yes | Birth data. No birthplace name or latitude is collected. | |
| locale | No | Language of the chart card shown to the user, as a BCP 47 tag, normally the language the user is writing in. Only zh-CN, zh-TW and en are supported; any other language falls back to en. | |
| include_today | No | Default true. When false, today's pillars are omitted (today is null), which keeps the result smaller. |
Output Schema
| Name | Required | Description |
|---|---|---|
| birth | Yes | Birth data as interpreted. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| today | Yes | Null when include_today is false. |
| locale | No | Chart card language resolved from the locale argument. Absent when no valid locale was given. |
| palaces | Yes | Palaces derived from the chart; month-based palaces use the adjusted month pillar. |
| pillars | Yes | |
| day_master | Yes | |
| conventions | Yes | Chart conventions used for this result. |
| solar_terms | Yes | The month-defining solar terms before and after the birth. |
| luck_pillars | Yes | Luck pillars (Da Yun). |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| month_pillar_raw | Yes | Northern-hemisphere month pillar; equals pillars.month.ganzhi for northern births. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description reinforces this with "Deterministic; nothing stored." It also adds non-obvious behavioral detail not in the annotations, namely that southern-hemisphere births use cross-region rules. It stops short of describing output size or notes/assumption flags, which the output schema presumably covers.
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?
Three dense sentences organized as purpose, positive trigger with example, and exclusion list, with the deterministic/no-storage note last. Every clause carries scope information; nothing is redundant with the name or title.
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 computational tool with a rich nested schema and an output schema, the description supplies what structured fields cannot: scope, exclusions, example phrasing, and behavioral guarantees. Return-format detail is correctly omitted because an output schema exists.
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 description coverage is 100% and the nested birth object is documented in detail (timezone format, lunar conversion, leap month, true solar time, hemisphere inference), so the schema does the heavy lifting. The description adds only one semantic hint beyond that — the southern-hemisphere cross-region rule — which is a marginal contribution, making the baseline 3 appropriate.
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 leads with a specific verb and resource ("Compute a BaZi chart from birth data") and enumerates exactly what the chart contains (pillars, Ten Gods, hidden stems, Na Yin, Day Master, luck pillars, palaces, today's pillars). It also names the sibling tools it is not for, so the agent can distinguish it without opening the schema.
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 gives an explicit positive trigger with a sample utterance ("What is my BaZi? Born 1990-05-17 08:30 in Taipei") and an explicit exclusion list mapping each rejected case to the sibling that handles it (get_saved_chart, get_bazi_judgment, get_almanac). Alternatives and when-not conditions are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_saved_chartCreate saved chartAInspect
Save a new chart to the connected account from name, gender, birth date (Gregorian or lunar), optional birth time and birthplace; time zone and hemisphere come from the birthplace as in the app. Returns the chart_id. Use when the user explicitly asks to save a chart; check list_saved_charts first to avoid duplicates. For another person the user must confirm consent (consent_attested); without it nothing is saved or cast. Not for casting without saving (use cast_bazi_chart), reading (use get_saved_chart) or editing existing charts. New charts return no pillars; read them with get_saved_chart.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | Yes | Determines whether the luck pillars run forward or backward. | |
| subject | No | Whose chart this is, recorded for audit only. Default other. Every chart saved here is an additional chart; it never becomes the user's own primary chart. | |
| calendar | No | Default solar (Gregorian). Use lunar when the user gives a Chinese lunar birthday; the server converts it to Gregorian, so do not convert it yourself. | |
| birth_date | Yes | Birth date in the local calendar of the birthplace, YYYY-MM-DD: Gregorian by default; with calendar lunar, the Chinese lunar year, month (1-12) and day. | |
| birth_time | No | Local clock time at the birthplace, HH:mm. Omit if unknown; the chart is then marked as hour uncertain. | |
| birthplace | Yes | Birthplace name as in the FateTell app, a city optionally with country, 1 to 60 characters. Not stored or logged by this server. | |
| display_name | Yes | Name for the chart, 1 to 20 characters, no line breaks or Markdown symbols. | |
| consent_attested | No | Required true when subject is other: the user confirms they have that person's permission. | |
| lunar_leap_month | No | Default false. Only with calendar lunar: true when the birth was in a leap month, e.g. leap 4th month is month 04 with true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| moments | Yes | Calendar facts about this date: luck_pillar_change_in (value = months), solar_term_today, annual_clash (year branch clashes the natal year branch), birth_year_return (year pillar equals the natal year pillar), month_clash, energy_extreme (high or low energy), birthday_window (within 7 days of the birthday). |
| pillars | Yes | Null while the chart is still being computed. |
| chart_id | Yes | |
| resolved | Yes | Time zone and hemisphere FateTell resolved from the birthplace, and the Gregorian birth date saved. |
| chart_ready | Yes | |
| display_name | Yes | |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| matched_existing | Yes | True when a chart with the same name and birth details already exists; that chart is returned and no new one is created. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: annotations only say it is a non-idempotent, non-destructive write. The description adds that it returns chart_id, that time zone and hemisphere are derived from birthplace, that a missing birth time marks the chart hour-uncertain, that consent gates the write entirely, and that new charts carry no pillars until read back.
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?
Front-loads what is saved and what is returned, then usage, then exclusions, then the follow-up read. No sentence is redundant and the exclusion sentence is compactly parallel in structure.
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 nine-parameter write tool with a full-coverage schema, an output schema, and safety annotations, nothing material is left unsaid: return value, consent gate, derived fields, and the post-save read path are all covered.
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 description coverage is 100%, so the baseline is 3; the description still adds cross-parameter meaning the schema does not, namely the birthplace-to-timezone/hemisphere derivation and the subject/consent coupling. It does not, however, restate the enum semantics such as gender driving luck-pillar direction, which remain schema-only.
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?
States a specific verb and resource ('Save a new chart') plus the inputs it is built from, and immediately distinguishes itself from three siblings by name (cast_bazi_chart, get_saved_chart, list_saved_charts). An agent can route without opening any schema.
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?
Gives an explicit trigger ('when the user explicitly asks to save a chart'), a pre-check ('check list_saved_charts first to avoid duplicates'), a hard precondition (consent_attested for another person, otherwise nothing is saved or cast), and three named exclusions with the alternative for each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_almanacGet almanacARead-onlyIdempotentInspect
Return the Chinese almanac for one to 31 consecutive days: Gregorian and lunar dates, solar terms, and the year, month and day pillars. The month pillar is given for both hemispheres. Use for questions like "What is today's day pillar?", "When is the next solar term?", or to get the stems and branches of upcoming days or months for date selection. Not for a person's chart or days: use get_saved_chart or cast_bazi_chart for a chart, get_daily_fortune or get_chart_calendar for a saved chart's days. Not for Western astrology. Deterministic; no personal data involved.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of consecutive days, 1 to 31. Default 1. | |
| timezone | No | IANA time zone name used only to resolve the default start_date. Default UTC. | |
| hemisphere | No | Which month pillar the text summary leads with. Default north. The structured result always includes both. | |
| start_date | No | First date, YYYY-MM-DD, between 1900-01-01 and 2100-12-31. Default: today in timezone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | Number of days returned. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| days_list | Yes | Pillars are taken at 12:00 Beijing time; months and years change at the exact solar term instant. |
| truncated | Yes | True when fewer days than requested were returned to stay within the size limit. |
| start_date | Yes | First date returned, YYYY-MM-DD. |
| conventions | Yes | Calendar conventions used for this result. |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| next_start_date | No | When truncated, the start_date that continues the range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, closed-world and non-destructive, so the bar is lower. The description adds genuinely new behavioral facts: the operation is deterministic, involves no personal data, and the hemisphere flag only changes which month pillar leads the text summary while the structured result always contains both. It does not discuss pagination or limits on the response size for 31 days, which is why it falls short of a 5.
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?
Front-loaded with the verb and payload, then usage examples, then exclusions, then behavioral notes. Every sentence carries routing or behavioral information; there is no filler or repetition.
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?
An output schema exists, so return values need not be explained. Given a zero-required-parameter, four-optional-parameter read tool, the description supplies scope, routing to four sibling alternatives, and the hemisphere nuance — everything an agent needs to call it correctly.
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%, so days, timezone, hemisphere and start_date are already fully documented, giving a baseline of 3. The description echoes the 1–31 day range and clarifies that the month pillar is produced for both hemispheres, but this largely restates what the schema's hemisphere description already says rather than adding new syntax or format guidance.
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?
States a specific verb and resource ("Return the Chinese almanac for one to 31 consecutive days") and enumerates the payload: Gregorian and lunar dates, solar terms, year/month/day pillars. It explicitly excludes Western astrology, so an agent can distinguish it from chart-oriented siblings without opening any schema.
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?
Gives concrete example questions that should route here ("What is today's day pillar?", "When is the next solar term?") plus negative routing with named alternatives: get_saved_chart or cast_bazi_chart for a chart, get_daily_fortune or get_chart_calendar for a saved chart's days. Both the when and the when-not are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bazi_judgmentGet BaZi judgmentARead-onlyIdempotentInspect
Return FateTell's Day Master verdict (strong, weak, follow-strong, follow-weak) and ranked favorable, unfavorable and neutral elements under rule set v1.0, for birth data or a saved chart_id. Use when the user asks about strength or favorable elements for a birth not saved (pass birth), or for a saved chart whose judgment get_saved_chart reported as not yet available (pass chart_id). Not a substitute for the chart (use cast_bazi_chart for pillars). For a saved chart, get_saved_chart already includes this judgment. Deterministic; nothing stored. Requires an active FateTell membership.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | No | Birth data to judge; computed on the fly and not stored. Give either birth or chart_id. | |
| chart_id | No | chart_id from list_saved_charts, or "self" for the account holder's own chart. Returns the judgment stored with that chart. Give either birth or chart_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| source | Yes | computed from birth data, or the judgment saved with chart_id. |
| pillars | Yes | The four pillars as stem-branch strings: year, month, day, hour. |
| chart_id | No | Present when source is saved. |
| judgment | Yes | FateTell's Day Master strength and favorable elements under its rule set. |
| day_master | Yes | |
| conventions | Yes | Chart conventions used for this result. |
| display_name | No | Present when source is saved. |
| rule_version | Yes | FateTell rule set version: v1.0, or legacy when the judgment was projected from older account fields. |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| month_pillar_raw | Yes | Northern-hemisphere month pillar; equals pillars.month for northern charts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, it discloses that the call is deterministic, stores nothing, and requires an active FateTell membership — an auth prerequisite the annotations cannot express. The rule-set version pin is also useful behavioral context. It does not cover rate limits or failure modes, which keeps it just short of a 5.
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?
Four sentences, front-loaded with what is returned, then when to use, then what it is not, then operational constraints. Every sentence carries distinct information with no restatement of the name or title.
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 two-parameter, nested-schema tool with an output schema, the description covers the pieces the structured fields cannot: the auth requirement, the no-storage determinism guarantee, the versioned rule set, and the sibling routing. Return-value shape is correctly left to the output schema.
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 description coverage is 100%, including nested birth fields, so the schema carries the semantics. The description only restates the either/or relationship between birth and chart_id, which the schema already declares on both properties; it adds no format or edge-case detail beyond that. Baseline 3 is appropriate.
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?
States a specific verb and resource: returns the Day Master verdict (strong, weak, follow-strong, follow-weak) plus ranked favorable/unfavorable/neutral elements under rule set v1.0. It explicitly separates itself from cast_bazi_chart (pillars) and get_saved_chart (which already embeds this judgment), so an agent can choose without opening a schema.
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?
Gives both branches of when to call: pass birth for an unsaved birth, or pass chart_id for a saved chart whose judgment get_saved_chart reported as not yet available. It also names an explicit exclusion (not a substitute for the chart; use cast_bazi_chart for pillars), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chart_calendarGet chart calendarARead-onlyIdempotentInspect
Return a saved chart's view of upcoming dates: for each day (up to 31) the year, month and day pillars adjusted for this chart's hemisphere, relations with the natal pillars, month clash and solar terms; or for each month (up to 12) the month pillar and its natal relations. Use to pick a date or see upcoming days or months for a saved chart. Only stems, branches and relations are returned; interpretation is left to you. Not for one day's energy level or do/avoid items (use get_daily_fortune) or dates without a chart (use get_almanac). Needs a chart_id; it cannot take birth data.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Days 1 to 31 (default 7), or months 1 to 12 (default 3). | |
| chart_id | Yes | chart_id from list_saved_charts, or "self" for the account holder's own chart. | |
| start_date | No | YYYY-MM-DD. Default: today in the account's time zone. For months, the month containing this date comes first. | |
| granularity | No | day (default) or month. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | Present for granularity day. Pillars are taken at 12:00 Beijing time. |
| count | Yes | Number of days or months returned. |
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| months | No | Present for granularity month. |
| moments | Yes | Calendar facts about this date: luck_pillar_change_in (value = months), solar_term_today, annual_clash (year branch clashes the natal year branch), birth_year_return (year pillar equals the natal year pillar), month_clash, energy_extreme (high or low energy), birthday_window (within 7 days of the birthday). |
| chart_id | Yes | |
| truncated | Yes | |
| hemisphere | Yes | |
| start_date | Yes | |
| granularity | Yes | |
| display_name | Yes | |
| natal_pillars | Yes | The four pillars as stem-branch strings: year, month, day, hour. |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| next_start_date | No | When truncated, the start_date that continues the range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description adds value on top: it discloses the ceiling per mode (up to 31 days, up to 12 months), that pillars are hemisphere-adjusted for the chart, and that only stems, branches and relations come back with interpretation deliberately left to the caller. It does not discuss error behavior for an invalid chart_id or what happens when count exceeds the maximum, which keeps it short of a 5.
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?
Front-loaded with the return shape, then usage, then exclusions — a sensible order with no filler sentences. Minor redundancy: the "up to 31" / "up to 12" limits simply restate the count parameter's schema description.
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?
Return values are covered by the output schema, and the description still signals the shape of the payload and that no interpretation is included. With alternatives named, prerequisites stated, and per-mode limits given, an agent has everything needed to select and call this correctly.
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 each parameter already carries a description (count ranges and defaults, chart_id provenance including "self", start_date format and default time zone, granularity enum). The description only echoes the count ceilings and the chart_id requirement, so it adds little semantic meaning beyond the schema; baseline 3 applies.
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?
Names a specific verb and resource ("Return a saved chart's view of upcoming dates") and immediately bounds the output shape per granularity (day: year/month/day pillars, natal relations, month clash, solar terms; month: month pillar and natal relations). An agent can tell this apart from get_daily_fortune, get_almanac and get_saved_chart without opening any schema.
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?
Explicit when-to-use ("Use to pick a date or see upcoming days or months for a saved chart") and explicit when-not with named alternatives for both exclusions: get_daily_fortune for one day's energy/do-avoid, get_almanac for dates without a chart. It also states the prerequisite that a chart_id is required and that birth data cannot be passed, which is the main failure mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_fortuneGet daily fortuneARead-onlyIdempotentInspect
Return a saved chart's daily fortune for one date: energy level (high / medium / low), the day's stems-and-branches relations with the natal chart, the day's do/avoid items, the day pillar, this chart's year and month pillars and month clash. Use for how a specific day looks for a saved chart, e.g. "How is today for me?". Pass chart_id (or "self") and optionally a date; the default is today in the account's time zone. Not for a day's pillars without a chart (use get_almanac), several days at once (use get_chart_calendar), or births not saved. Contains no generated text.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD, within 30 days before or after today. Default: today in the account's time zone. | |
| locale | No | Language of the do/avoid items. Default: the account's interface language. | |
| chart_id | Yes | chart_id from list_saved_charts, or "self" for the account holder's own chart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | The date, YYYY-MM-DD. |
| flow | Yes | Year and month pillars of the date for this chart. |
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| energy | Yes | Energy level: high, medium or low. No score is given. |
| locale | Yes | Language of the do/avoid items. |
| moments | Yes | Calendar facts about this date: luck_pillar_change_in (value = months), solar_term_today, annual_clash (year branch clashes the natal year branch), birth_year_return (year pillar equals the natal year pillar), month_clash, energy_extreme (high or low energy), birthday_window (within 7 days of the birthday). |
| chart_id | Yes | |
| relations | Yes | The day pillar's relations with the natal pillars. |
| day_pillar | Yes | A stem-branch pair in Chinese characters, e.g. "丙午". |
| month_clash | Yes | Whether the day branch clashes with the month branch. |
| algo_version | Yes | |
| display_name | Yes | |
| materialized | Yes | |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| recommendations | Yes | Do and avoid items from the FateTell app, as written there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that results contain no generated text and clarifies the default date behavior in the account's time zone, which is useful behavioral context beyond annotations.
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 dense but well organized: it states the return contents first, gives the usage scenario and parameters, then lists exclusions. Every sentence contributes useful selection or invocation information.
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 the three parameters, full schema coverage, output schema, and read-only annotations, the description is complete enough for an agent to select and invoke it correctly. It covers scope, defaults, alternatives, and even notes the absence of generated text.
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 description coverage is 100%, so the schema already documents chart_id, date, and locale thoroughly. The description reinforces the required chart_id and the 'self' shortcut and mentions the optional date default, but adds little parameter meaning beyond the 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?
The description uses a specific verb and resource ('Return a saved chart's daily fortune for one date') and enumerates the outputs: energy level, stems-and-branches relations, do/avoid items, day pillar, year/month pillars, and month clash. It is clearly distinguishable from siblings such as get_almanac and get_chart_calendar.
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 states the use case with an example question ('How is today for me?') and explicitly routes agents away to get_almanac for day pillars without a chart and get_chart_calendar for multiple days. It also rules out births that are not saved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fatetell_accountGet FateTell accountARead-onlyIdempotentInspect
Return the connected FateTell account: masked email, sign-in method, interface language, time zone, membership status, the permissions granted to this client, and this account's remaining quota for each tool. Use when the user asks which account is connected, whether membership is active, how many calls remain, or when a tool returned membership_required or rate_limited. Not for reading charts (use list_saved_charts / get_saved_chart). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| quotas | Yes | This account's per-tool limits; tools without a limit are not listed. |
| account | Yes | |
| connection | Yes | |
| membership | Yes | |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint false, and openWorldHint false. The description adds that the tool returns permissions granted to this client and remaining quota per tool, which are behavioral details not covered by annotations. However, the output schema exists and likely details the return fields, and 'Read-only' repeats the annotation without adding new information.
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?
Three sentences: first lists returned fields, second gives usage conditions, third excludes chart tools and notes read-only. The description is front-loaded and every sentence contributes to correct invocation. Minor redundancy with the read-only annotation, but no wasted words.
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 the tool's simplicity (0 parameters) and the presence of an output schema, the description is complete enough. It covers purpose, when to use, when not to use, and behavioral context (permissions, quota). Nothing an agent needs to invoke it correctly is missing.
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 zero parameters, so the baseline score is 4 per the rules. The description adds no parameter information, which is appropriate since none exist.
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?
States a specific verb 'Return' and resource 'connected FateTell account', enumerates the returned fields (masked email, sign-in method, interface language, time zone, membership status, permissions, remaining quota), and explicitly distinguishes from chart reading tools by naming list_saved_charts and get_saved_chart. An agent can identify its purpose from the description alone.
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?
Explicitly states when to use: user asks about connected account, membership status, remaining calls, or when a tool returned membership_required or rate_limited. Also states when not to use: 'Not for reading charts' and provides sibling alternatives. Complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_chartGet saved chartARead-onlyIdempotentInspect
Return one saved chart in full: birth date, time and time zone (no birthplace), pillars with Ten Gods, hidden stems and Na Yin, all luck pillars (current one marked), palaces, the stored Day Master strength and favorable elements, and today's pillars. Use whenever the user asks about a saved chart or "my chart"; luck pillars and judgment are included. chart_id comes from list_saved_charts, or "self" for the user's own chart. Not for births not saved (use cast_bazi_chart). Never re-cast or re-judge a saved chart with other tools. Not for predicting events or years of accident, illness or death.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language of the chart card shown to the user, as a BCP 47 tag, normally the language the user is writing in. Only zh-CN, zh-TW and en are supported; any other language falls back to en. | |
| chart_id | Yes | chart_id from list_saved_charts, or "self" for the account holder's own chart. | |
| include_today | No | Default true. When false, today's pillars are omitted (today is null). |
Output Schema
| Name | Required | Description |
|---|---|---|
| birth | Yes | |
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| today | Yes | Today's pillars for this chart; null when include_today is false. |
| gender | Yes | |
| locale | No | Chart card language resolved from the locale argument. Absent when no valid locale was given. |
| is_self | Yes | |
| moments | Yes | Calendar facts about this date: luck_pillar_change_in (value = months), solar_term_today, annual_clash (year branch clashes the natal year branch), birth_year_return (year pillar equals the natal year pillar), month_clash, energy_extreme (high or low energy), birthday_window (within 7 days of the birthday). |
| palaces | Yes | Palaces derived from the chart; month-based palaces use the adjusted month pillar. |
| pillars | Yes | |
| chart_id | Yes | |
| judgment | Yes | Null when the account has no stored judgment for this chart. |
| day_master | Yes | |
| conventions | Yes | Chart conventions used for this result. |
| display_name | Yes | |
| luck_pillars | Yes | Luck pillars (Da Yun) as stored with the chart. |
| rule_version | No | Present when a judgment is included: v1.0, or legacy for a judgment projected from older account fields. |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
| paipan_version | Yes | Chart rule version. Charts computed now are always v1 (FateTell cross-region rules). |
| tzdata_version | Yes | IANA time zone database version used by the server. |
| month_pillar_raw | Yes | Northern-hemisphere month pillar; equals pillars.month.ganzhi for northern charts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: birthplace is deliberately omitted from the return, the current luck pillar is marked, and the agent is told never to recompute a saved chart with other tools. It does not discuss pagination, errors for unknown chart_id, or what 'stored' Day Master judgment implies about freshness, leaving some room.
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?
Front-loaded with the return payload, then usage and exclusions — a sensible ordering with no filler sentences. The return enumeration is dense and long, but each item earns its place by telling the agent what it will and will not get (e.g. no birthplace).
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?
Even though an output schema exists and would excuse omitting return details, the description summarizes the payload, marks the current luck pillar, notes the missing birthplace, and pins down the boundary against cast_bazi_chart and against predictive use. Nothing an agent needs in order to call it correctly is absent.
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 description coverage is 100%, so all three parameters (locale, chart_id, include_today) are already documented, and the description largely restates the chart_id semantics rather than adding to them. It says nothing about locale or the include_today default at the description level, so it adds little beyond the 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?
The opening clause names a specific verb and resource ('Return one saved chart in full') and then enumerates exactly what is included — birth date/time/zone, pillars with Ten Gods, hidden stems, Na Yin, luck pillars, palaces, Day Master strength, today's pillars. It is clearly distinguishable from cast_bazi_chart, which computes a chart rather than retrieving a stored one.
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?
Explicit when-to-use ('whenever the user asks about a saved chart or "my chart"'), explicit exclusion ('Not for births not saved (use cast_bazi_chart)'), an explicit prohibition against re-casting or re-judging with other tools, and an explicit scope limit ('Not for predicting events or years of accident, illness or death'). The id source ('chart_id comes from list_saved_charts, or "self"') is also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_chartsList saved chartsARead-onlyIdempotentInspect
List the charts saved in the connected FateTell account: id, display name, gender, whether it is the user's own chart, hemisphere, chart rule version and whether the chart has been computed. Use first whenever the user refers to "my chart", a family member's chart or any saved profile, to get the chart_id that get_saved_chart, get_bazi_judgment, get_daily_fortune and get_chart_calendar need. Do not ask for birth data when a saved chart may exist. Not for creating charts (use create_saved_chart) or reading a chart's content (use get_saved_chart). Birthplace and coordinates are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | FateTell web pages for objects in this result, for citation. Only objects already present in the result are linked. |
| notes | Yes | Codes for facts that qualify this result: hour_assumed (no birth time, 12:00 used), true_solar_skipped_no_longitude, southern_month_adjusted, palace_formula_lunar_javascript (life and body palaces follow the lunar-javascript formula), legacy_v0_chart, judgment_unavailable, chart_pending, truncated, lunar_converted (the birth date was given in the lunar calendar and converted to Gregorian). |
| total | Yes | |
| charts | Yes | |
| engine_version | Yes | FateTell calculation engine version (package version + commit). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered. The description adds real value beyond them: the exact field set returned and the notable omission that "Birthplace and coordinates are never returned," which prevents an agent from promising location data. It does not discuss empty-result behavior or ordering, so it stops short of a 5.
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?
Three tight sentences ordered by importance: what it returns, when to use it first, then what it explicitly does not do. Every clause carries information an agent needs; nothing is padded or restated from the title.
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 zero-argument, read-only list tool with a declared output schema and rich annotations, the description covers the remaining gaps: the field inventory, the deliberate absence of birthplace/coordinates, and the handoff of chart_id to four named consumers. Nothing an agent needs in order to call it correctly is missing.
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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly describes no arguments and instead spends its words on downstream usage.
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?
Opens with a specific verb+resource ("List the charts saved in the connected FateTell account") and immediately enumerates the returned fields (id, display name, gender, own-chart flag, hemisphere, rule version, computed status). It explicitly names what it is not (create_saved_chart, get_saved_chart), so an agent can distinguish it from all siblings without opening a schema.
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?
Gives an explicit precedence rule ("Use first whenever the user refers to 'my chart'..."), states the downstream payoff (provides the chart_id that get_saved_chart, get_bazi_judgment, get_daily_fortune and get_chart_calendar need), and adds a negative instruction ("Do not ask for birth data when a saved chart may exist"). Exclusions for the two closest siblings are named with their alternatives.
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.
9 tool updates
- First observed
cast_bazi_chart - First observed
create_saved_chart - First observed
get_almanac - First observed
get_bazi_judgment - First observed
get_chart_calendar - First observed
get_daily_fortune - First observed
get_fatetell_account - First observed
get_saved_chart - First observed
list_saved_charts
Related MCP Connectors
Generate BaZi charts from birth details. Explore Four Pillars, solar terms, and Luck Pillars for d…
BaZi (Chinese Four Pillars) chart calculator. Structured chart data only, no predictions.
BaZi four pillars, Chinese zodiac, lunisolar calendar and almanac days for AI agents.
Bazi (Four Pillars) and Qimen Dunjia charts with true solar time and historical time zones.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides accurate Chinese Bazi (八字) fortune-telling calculations including birth chart analysis, destiny forecasting, and Chinese calendar information. Addresses inaccuracies in existing AI fortune-telling tools by delivering precise Bazi data for personality analysis and metaphysical insights.217 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables traditional Chinese fortune-telling through BaZi (Four Pillars) analysis, including solar/lunar date conversion, Five Element balance calculations, Ten Gods deduction, and destiny interpretation for metaphysics applications.12 npmMIT
- FlicenseNot gradedqualityNot gradedmaintenanceCalculates Chinese BaZi (Four Pillars of Destiny) charts based on birth date, time, and location, including solar term information, decade luck cycles, and true solar time corrections.2-
- AlicenseNot gradedqualityAmaintenanceEnables calculation of Four Pillars of Destiny (BaZi) charts using true solar time and a global geographic database, providing pillars, Da Yun, and branch interactions for any location and time.34 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.