tilwhen date engine

Deterministic date arithmetic with auditable receipts: business days, due dates, holidays.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
98%
Calidad de los nombres
87%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'invoice_due' description lacks action verben invoice_due

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~4,104Tokens (definiciones de herramientas)
~4.3 KBTamaño de respuesta típico
Impacto significativo en la atención (3.21% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "tilwhen": {
      "url": "https://mcp.tilwhen.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://mcp.tilwhen.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (9)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢parse_date_query(q, tz, locale)

Parses queries like "90 business days from today in uganda" into a normalized operation, answers it, and returns the auditable receipt. Ambiguous dates (03/04/2027) return needsClarification instead of a guess.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The date question in plain language. Pass the user's wording rather than a date you computed."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    },
    "locale": {
      "type": "string",
      "enum": [
        "mdy",
        "dmy"
      ],
      "description": "Resolves ambiguous slash dates; omit to receive clarification choices"
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "parsed": {
      "anyOf": [
        {
          "type": "object",
          "properties": {},
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "description": "Normalized operation, or null when the query could not be understood confidently"
    },
    "confidence": {
      "type": "number",
      "description": "1.0 is a clean grammar hit; below 0.5 the query is refused rather than guessed"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Machine-readable notes, e.g. unsupported_unit or time_ignored"
    },
    "needsClarification": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Present when the query is genuinely ambiguous (e.g. 03/04/2027); offers explicit choices instead of a guess"
    },
    "canonicalUrl": {
      "type": [
        "string",
        "null"
      ],
      "description": "tilwhen page that answers this query, to cite; null when no page covers it"
    },
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer, absent when parsed is null"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt, absent when parsed is null"
    }
  },
  "required": [
    "parsed",
    "confidence",
    "warnings"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢add_days(date, days, tz)

The date N whole calendar days after a date (exclusive counting: the start date is day 0). Omit date for today in tz. For working days use business_days; for the gap between two dates use days_between.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)",
      "default": "today"
    },
    "days": {
      "type": "integer",
      "minimum": -100000,
      "maximum": 100000,
      "description": "Whole calendar days to add. Negative counts backwards."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "required": [
    "days"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢subtract_days(date, days, tz)

The date N whole calendar days before a date (exclusive counting: the start date is day 0). Omit date for today in tz. For working days use business_days; for the gap between two dates use days_between.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)",
      "default": "today"
    },
    "days": {
      "type": "integer",
      "minimum": -100000,
      "maximum": 100000,
      "description": "Whole calendar days to subtract. Negative counts forwards."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "required": [
    "days"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢days_between(from, to, tz)

Signed whole calendar days from the from date to the to date, midnight to midnight in tz: positive when to is later, negative when it is earlier. Endpoints are exclusive, so this is the gap and consecutive dates are 1 apart. Either date may be "today", resolved in tz. For working days between two dates use business_days; to move a date by N days use add_days or subtract_days.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "to": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢business_days(from, to, date, days, jurisdiction, ...)

Span mode (from+to): business days between two dates, exclusive of the start day, inclusive of the end day. Add mode (days, optional date): the date N business days away. Passing from or to selects span mode and needs both; days and date are then ignored, so add mode takes its start date in date, not from. Optional holiday jurisdiction or custom calendar, and a selectable working week. For calendar days use add_days, subtract_days or days_between.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "to": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "date": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "days": {
      "type": "integer",
      "minimum": -100000,
      "maximum": 100000,
      "description": "Add mode: business days to move. Negative counts backwards."
    },
    "jurisdiction": {
      "type": "string",
      "maxLength": 8,
      "description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
    },
    "customHolidays": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 1000,
      "description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
    },
    "workweek": {
      "type": "string",
      "enum": [
        "mon-fri",
        "sun-thu",
        "mon-sat"
      ],
      "description": "Working week. Default mon-fri (Sat+Sun weekend)."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢invoice_due(invoiceDate, net, roll, jurisdiction, customHolidays, ...)

Due date for Net-N payment terms (calendar days, invoice date = day 0). Optional roll-forward past weekends and, with a jurisdiction or custom calendar, public holidays.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "invoiceDate": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)",
      "default": "today"
    },
    "net": {
      "type": "integer",
      "minimum": 0,
      "maximum": 3650,
      "description": "Net-N payment terms in calendar days (Net 30 = 30)."
    },
    "roll": {
      "type": "boolean",
      "description": "Roll a weekend or holiday due date forward to the next business day. Default false."
    },
    "jurisdiction": {
      "type": "string",
      "maxLength": 8,
      "description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
    },
    "customHolidays": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 1000,
      "description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
    },
    "workweek": {
      "type": "string",
      "enum": [
        "mon-fri",
        "sun-thu",
        "mon-sat"
      ],
      "description": "Working week. Default mon-fri (Sat+Sun weekend)."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "required": [
    "net"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢next_occurrence(event, weekday, from, tz)

The next occurrence strictly after the base date (default today) of either a tracked event slug (e.g. "christmas") or a weekday (0 = Sunday .. 6 = Saturday). Provide exactly one of event/weekday.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event": {
      "type": "string",
      "maxLength": 40,
      "description": "Event slug (e.g. christmas). Exactly one of event/weekday."
    },
    "weekday": {
      "type": "integer",
      "minimum": 0,
      "maximum": 6,
      "description": "0 = Sunday .. 6 = Saturday. Exactly one of event/weekday."
    },
    "from": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢holidays(jurisdiction, year)

Observed public holidays with the nominal (legal) date and status: rule (statutory) or declared (officially declared for that year). Declared-only holidays are omitted for undeclared years, with a holiday_data_incomplete warning.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "jurisdiction": {
      "type": "string",
      "maxLength": 8,
      "description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB)."
    },
    "year": {
      "type": "integer",
      "minimum": 1600,
      "maximum": 3000,
      "description": "Calendar year to list, e.g. 2027"
    }
  },
  "required": [
    "jurisdiction",
    "year"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "answer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "The calculated answer (kind-discriminated)"
    },
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt: inputs, timezone, convention, workweek, holiday calendar, exclusions, versions, stable result ID"
    }
  },
  "required": [
    "answer",
    "receipt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢explain(op, date, days, from, to, ...)

Runs any operation and returns the receipt plus human-readable derivation steps. Set op, then pass the fields that operation's own tool takes. Use it when the user asks how an answer was reached.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "op": {
      "type": "string",
      "enum": [
        "add_days",
        "subtract_days",
        "days_between",
        "business_days",
        "invoice_due",
        "next_occurrence",
        "holiday_lookup"
      ],
      "description": "Operation to explain. holiday_lookup is the holidays tool; the others share their tool's name."
    },
    "date": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "days": {
      "type": "integer",
      "minimum": -100000,
      "maximum": 100000,
      "description": "Day count for add_days, subtract_days and business_days add mode."
    },
    "from": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "to": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "invoiceDate": {
      "type": "string",
      "pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
      "description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
    },
    "net": {
      "type": "integer",
      "minimum": 0,
      "maximum": 3650,
      "description": "Net-N payment terms in calendar days (Net 30 = 30)."
    },
    "roll": {
      "type": "boolean",
      "description": "Roll a weekend or holiday due date forward to the next business day. Default false."
    },
    "event": {
      "type": "string",
      "maxLength": 40,
      "description": "Event slug (e.g. christmas). Exactly one of event/weekday."
    },
    "weekday": {
      "type": "integer",
      "minimum": 0,
      "maximum": 6,
      "description": "0 = Sunday .. 6 = Saturday. Exactly one of event/weekday."
    },
    "year": {
      "type": "integer",
      "minimum": 1600,
      "maximum": 3000,
      "description": "Calendar year for holiday_lookup, e.g. 2027"
    },
    "jurisdiction": {
      "type": "string",
      "maxLength": 8,
      "description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
    },
    "customHolidays": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 1000,
      "description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
    },
    "workweek": {
      "type": "string",
      "enum": [
        "mon-fri",
        "sun-thu",
        "mon-sat"
      ],
      "description": "Working week. Default mon-fri (Sat+Sun weekend)."
    },
    "tz": {
      "type": "string",
      "maxLength": 64,
      "default": "UTC",
      "description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
    }
  },
  "required": [
    "op"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "receipt": {
      "type": "object",
      "properties": {},
      "additionalProperties": true,
      "description": "Auditable receipt for the operation"
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Human-readable derivation, identical to the REST /api/v1/explain output"
    }
  },
  "required": [
    "receipt",
    "steps"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada9 herramientas
verificadoversión no registrada9 herramientas