Calculate API and subscription costs, meeting time zones, recurring schedules and cron matches.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Estimate API workload costs in USD per request, day and month, with rates and dated snapshot provenance. Use for token budgets; use ai_subscription_stack_cost for chat or coding subscriptions. Model IDs use providerId/id from https://operatornest.com/api/models?subset=pricing, filtered to the MCP catalog; the OSS bundle lists accepted IDs in src/data/pricing-snapshot.json. Rates stay offline until the catalog is updated; missing rates return null. Cached tokens are part of total input; published batch and long-context rates apply only when eligible. Non-token charges are excluded.
Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation.
Total input tokens per request, including cached input tokens.
Generated output tokens per request.
Requests used to scale the daily estimate, independent of requestsPerMonth.
Requests used to scale the monthly estimate; not inferred from the daily count.
Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching.
Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected.
Estimate API workload costs in USD per request, day and month, with rates and dated snapshot provenance. Use for token budgets; use ai_subscription_stack_cost for chat or coding subscriptions. Model IDs use providerId/id from https://operatornest.com/api/models?subset=pricing, filtered to the MCP catalog; the OSS bundle lists accepted IDs in src/data/pricing-snapshot.json. Rates stay offline until the catalog is updated; missing rates return null. Cached tokens are part of total input; published batch and long-context rates apply only when eligible. Non-token charges are excluded.
| Argument | Type | Description |
|---|---|---|
| modelIds* | array | Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation. |
| inputTokens* | integer | Total input tokens per request, including cached input tokens. |
| outputTokens* | integer | Generated output tokens per request. |
| batchModelIds | array | Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected. |
| requestsPerDay* | integer | Requests used to scale the daily estimate, independent of requestsPerMonth. |
| requestsPerMonth* | integer | Requests used to scale the monthly estimate; not inferred from the daily count. |
| cachedInputTokens* | integer | Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching. |
{
"type": "object",
"required": [
"inputTokens",
"cachedInputTokens",
"outputTokens",
"requestsPerDay",
"requestsPerMonth",
"modelIds"
],
"properties": {
"modelIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "\\S",
"maxLength": 200,
"minLength": 1,
"description": "Model ID accepted by the MCP pricing catalog."
},
"maxItems": 20,
"minItems": 1,
"description": "Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation.",
"uniqueItems": true
},
"inputTokens": {
"type": "integer",
"maximum": 100000000,
"minimum": 0,
"examples": [
10000
],
"description": "Total input tokens per request, including cached input tokens."
},
"outputTokens": {
"type": "integer",
"maximum": 100000000,
"minimum": 0,
"examples": [
2000
],
"description": "Generated output tokens per request."
},
"batchModelIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "\\S",
"maxLength": 200,
"minLength": 1,
"description": "Selected model ID with a published batch discount."
},
"examples": [
[]
],
"maxItems": 20,
"minItems": 0,
"description": "Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected.",
"uniqueItems": true
},
"requestsPerDay": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"examples": [
100
],
"description": "Requests used to scale the daily estimate, independent of requestsPerMonth."
},
"requestsPerMonth": {
"type": "integer",
"maximum": 100000000,
"minimum": 0,
"examples": [
3000
],
"description": "Requests used to scale the monthly estimate; not inferred from the daily count."
},
"cachedInputTokens": {
"type": "integer",
"maximum": 100000000,
"minimum": 0,
"examples": [
5000
],
"description": "Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching."
}
},
"additionalProperties": false
}Total selected AI chat and coding subscriptions in USD and identify overlapping capabilities. Use to review a subscription stack; use ai_api_cost for API token charges. Select unique planIds from the schema enum; [] returns zero totals and no plans. Returns monthly and annual totals, selected plans, capability groups and dated official sources. Annual totals use published annual billing or twelve monthly charges; taxes, regional differences and promotions are excluded. Bundled rates are dated estimates, without live billing lookup or subscription changes.
| Argument | Type | Description |
|---|---|---|
| planIds* | array | Unique subscription IDs from the enum. An empty list returns zero totals and no selected plans. |
{
"type": "object",
"required": [
"planIds"
],
"properties": {
"planIds": {
"type": "array",
"items": {
"enum": [
"chatgpt-go",
"chatgpt-plus",
"chatgpt-pro",
"claude-pro",
"claude-max-5x",
"claude-max-20x",
"google-ai-pro",
"google-ai-ultra-5x",
"google-ai-ultra-20x",
"supergrok",
"supergrok-plus",
"perplexity-pro",
"perplexity-max",
"microsoft-365-premium",
"mistral-pro",
"manus-pro",
"genspark-plus",
"cursor-pro"
],
"type": "string",
"description": "ID of a plan in the bundled subscription catalog."
},
"examples": [
[
"chatgpt-plus",
"claude-pro"
],
[]
],
"maxItems": 18,
"minItems": 0,
"description": "Unique subscription IDs from the enum. An empty list returns zero totals and no selected plans.",
"uniqueItems": true
}
},
"additionalProperties": false
}Preview up to 10 cron matches strictly after a supplied UTC instant, within a 366-day search. Use to check existing scheduler syntax; use recurring_schedule to draft task recurrence calendars or meeting_time_zones for participant overlap. Returns UTC starts, local labels, normalized inputs and a dated syntax source; fewer matches or [] means the search window ended. Supports numeric stars, lists, ranges, steps and weekday names in the selected dialect; rejects L, W, # and named months. cloudflare requires UTC; other zones follow runtime daylight saving transitions. No schedule is installed or run.
| Argument | Type | Description |
|---|---|---|
| zone* | string | IANA time zone for matching local cron fields. cloudflare requires UTC. Daylight saving transitions follow the runtime time-zone database. |
| after* | string | UTC ISO instant from 2000 through 2100; matches are strictly after this instant. Only Z offsets are accepted. |
| count* | integer | Maximum matches to return. The list may be shorter or empty if no further matches occur within the 366-day search. |
| dialect* | string | Scheduler syntax and weekday numbering. github uses 0 or 7 for Sunday and 1–6 for Monday–Saturday; the others use 1–7 for Sunday–Saturday. |
| expression* | string | Cron fields in the selected dialect: five for github/cloudflare, six or seven for quartz, six for aws (optional cron(...) wrapper). Supports *, lists, ranges, steps and weekday names; rejects L, W, # and named months. Quartz/aws require ? in exactly one day field. |
Find shared 30-minute meeting slots inside 09:00–17:00 for 2–8 participants. Use to compare workday overlap; use recurring_schedule for repeating task calendars or cron_next_runs for scheduler previews. Returns all candidates, overlap count and up to three best slots ranked nearest to each person’s 13:00, with UTC starts and local labels. The date belongs to the first participant’s zone; daylight saving uses runtime IANA data. No calendar availability or holiday lookup, invitations or calendar writes.
| Argument | Type | Description |
|---|---|---|
| date* | string | Meeting date in the first person’s local time zone, from 2000-01-01 to 2100-12-31. |
| people* | array | Participants in display order. The first person determines the local date; all must fit a full half-hour inside 09:00–17:00. |
{
"type": "object",
"required": [
"date",
"people"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-10-05"
],
"maxLength": 10,
"minLength": 10,
"description": "Meeting date in the first person’s local time zone, from 2000-01-01 to 2100-12-31."
},
"people": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"zone"
],
"properties": {
"name": {
"type": "string",
"pattern": "\\S",
"examples": [
"Sam"
],
"maxLength": 80,
"minLength": 1,
"description": "Participant label used in the returned local-time display."
},
"zone": {
"type": "string",
"pattern": "\\S",
"examples": [
"America/New_York",
"Asia/Kolkata"
],
"maxLength": 100,
"minLength": 1,
"description": "IANA time zone supported by Intl.DateTimeFormat."
}
},
"additionalProperties": false
},
"maxItems": 8,
"minItems": 2,
"description": "Participants in display order. The first person determines the local date; all must fit a full half-hour inside 09:00–17:00."
}
},
"additionalProperties": false
}Prepare weekly, biweekly or monthly task calendars and estimate monthly effort for up to 20 tasks. Use to draft a recurring work plan; use cron_next_runs to preview existing cron syntax or meeting_time_zones for shared workday slots. Returns monthly hours, first dates, recurrence rules and an RFC 5545 calendar. Times float in the importing calendar’s local zone; weekly estimates use 52/12 runs per month and biweekly 26/12. owner is a planning label, with no assignment or execution. No calendar is updated; an empty task list returns zero hours and no events.
| Argument | Type | Description |
|---|---|---|
| tasks* | array | Tasks to include in the estimate and calendar. [] returns zero hours and a calendar with no events. |
| startDate* | string | Earliest date for the first occurrence of each task, from 2000-01-01 to 2100-12-31. |
{
"type": "object",
"required": [
"startDate",
"tasks"
],
"properties": {
"tasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"frequency",
"day",
"monthday",
"minutes",
"time",
"owner"
],
"properties": {
"day": {
"enum": [
"MO",
"TU",
"WE",
"TH",
"FR",
"SA",
"SU"
],
"type": "string",
"examples": [
"MO"
],
"description": "Weekday for weekly/biweekly tasks. Required but ignored for monthly tasks."
},
"time": {
"type": "string",
"pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
"examples": [
"09:00"
],
"maxLength": 5,
"minLength": 5,
"description": "24-hour HH:mm start time, floating in the importing calendar’s local time zone."
},
"owner": {
"enum": [
"delegate",
"keep",
"decide"
],
"type": "string",
"description": "Planning label: delegate to an operator, keep for yourself, or decide later. Included in the calendar note; does not assign or execute work."
},
"title": {
"type": "string",
"pattern": "\\S",
"examples": [
"Investor update"
],
"maxLength": 80,
"minLength": 1,
"description": "Task label used as the calendar event summary."
},
"minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 1,
"examples": [
35
],
"description": "Estimated minutes per run; used for event duration and monthly hours."
},
"monthday": {
"type": "integer",
"maximum": 28,
"minimum": 1,
"examples": [
1
],
"description": "Day of month for monthly tasks, limited to dates present in every month. Required but ignored for weekly/biweekly tasks."
},
"frequency": {
"enum": [
"weekly",
"biweekly",
"monthly"
],
"type": "string",
"description": "Repeat every week, every two weeks from the first matching weekday, or every month."
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 0,
"description": "Tasks to include in the estimate and calendar. [] returns zero hours and a calendar with no events."
},
"startDate": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-10-05"
],
"maxLength": 10,
"minLength": 10,
"description": "Earliest date for the first occurrence of each task, from 2000-01-01 to 2100-12-31."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"expression",
"dialect",
"zone",
"after",
"count"
],
"properties": {
"zone": {
"type": "string",
"pattern": "\\S",
"examples": [
"UTC",
"America/New_York"
],
"maxLength": 100,
"minLength": 1,
"description": "IANA time zone for matching local cron fields. cloudflare requires UTC. Daylight saving transitions follow the runtime time-zone database."
},
"after": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$",
"examples": [
"2026-10-02T00:00:00Z"
],
"maxLength": 24,
"minLength": 20,
"description": "UTC ISO instant from 2000 through 2100; matches are strictly after this instant. Only Z offsets are accepted."
},
"count": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"examples": [
3
],
"description": "Maximum matches to return. The list may be shorter or empty if no further matches occur within the 366-day search."
},
"dialect": {
"enum": [
"github",
"cloudflare",
"quartz",
"aws"
],
"type": "string",
"examples": [
"github"
],
"description": "Scheduler syntax and weekday numbering. github uses 0 or 7 for Sunday and 1–6 for Monday–Saturday; the others use 1–7 for Sunday–Saturday."
},
"expression": {
"type": "string",
"pattern": "\\S",
"examples": [
"0 9 * * 1-5"
],
"maxLength": 200,
"minLength": 1,
"description": "Cron fields in the selected dialect: five for github/cloudflare, six or seven for quartz, six for aws (optional cron(...) wrapper). Supports *, lists, ranges, steps and weekday names; rejects L, W, # and named months. Quartz/aws require ? in exactly one day field."
}
},
"additionalProperties": false
}