MCP Server

OperatorNest tools

com.operatornest/tools
Finance & Investing Productivity Public & reachable MCP 2025-11-25

What this MCP does

Estimates AI API and subscription costs and calculates meeting times, recurring schedules, and cron execution previews.

ai_api_cost
AI API cost
Estimate USD per request, day and month from token counts, caching and published batch discounts. Use for an API workload budget, not chat subscriptions. Model IDs use providerId/id from https://operatornest.com/api/models?subset=pricing; some catalog records are unavailable through MCP. Rates are from the dated catalog snapshot returned with the result.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['inputTokens', 'cachedInputTokens', 'outputTokens', 'requestsPerDay', 'requestsPerMonth', 'modelIds'], 'properties': {'modelIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'uniqueItems': True}, 'inputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'outputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'batchModelIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 0, 'description': 'Optional model IDs using a published batch discount.', 'uniqueItems': True}, 'requestsPerDay': {'type': 'integer', 'maximum': 10000000, 'minimum': 0}, 'requestsPerMonth': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'cachedInputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['tool', 'input', 'units', 'method', 'assumptions', 'provenance', 'estimates'], 'properties': {'tool': {'const': 'ai-api-cost-calculator'}, 'input': {'type': 'object', 'required': ['inputTokens', 'cachedInputTokens', 'outputTokens', 'requestsPerDay', 'requestsPerMonth', 'modelIds'], 'properties': {'modelIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'uniqueItems': True}, 'inputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'outputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'batchModelIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 0, 'description': 'Optional model IDs using a published batch discount.', 'uniqueItems': True}, 'requestsPerDay': {'type': 'integer', 'maximum': 10000000, 'minimum': 0}, 'requestsPerMonth': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}, 'cachedInputTokens': {'type': 'integer', 'maximum': 100000000, 'minimum': 0}}, 'additionalProperties': False}, 'units': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'method': {'type': 'string'}, 'estimates': {'type': 'array', 'items': {'type': 'object', 'required': ['modelId', 'name', 'perRequest', 'perDay', 'perMonth', 'longContext', 'batch', 'ratesPerMillion', 'sourceUrl', 'note'], 'properties': {'name': {'type': 'string'}, 'note': {'type': 'string'}, 'batch': {'type': 'boolean'}, 'perDay': {'type': ['number', 'null']}, 'modelId': {'type': 'string'}, 'perMonth': {'type': ['number', 'null']}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'perRequest': {'type': ['number', 'null']}, 'longContext': {'type': 'boolean'}, 'ratesPerMillion': {'type': 'object', 'required': ['input', 'cachedInput', 'output'], 'properties': {'input': {'type': ['number', 'null']}, 'output': {'type': ['number', 'null']}, 'cachedInput': {'type': ['number', 'null']}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'provenance': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
ai_subscription_stack_cost
AI subscription stack cost
Total selected AI chat and coding subscriptions in USD and identify overlapping capabilities. Returns monthly charges, annual billing or twelve-charge estimates, plans and dated official sources. Use for reviewing a subscription stack, not API token costs.
Read only Idempotent
Input schema
{'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'}, 'maxItems': 18, 'minItems': 0, 'uniqueItems': True}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['tool', 'input', 'method', 'assumptions', 'units', 'plans', 'monthlyTotal', 'annualTotal', 'overlap', 'provenance'], 'properties': {'tool': {'const': 'ai-subscription-cost-calculator'}, 'input': {'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'}, 'maxItems': 18, 'minItems': 0, 'uniqueItems': True}}, 'additionalProperties': False}, 'plans': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'provider', 'name', 'monthly', 'annual', 'capabilities', 'modelFamilies', 'source', 'modelSource', 'checked'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'annual': {'type': ['number', 'null']}, 'source': {'type': 'string'}, 'checked': {'type': 'string'}, 'monthly': {'type': 'number'}, 'provider': {'type': 'string'}, 'annualNote': {'type': 'string'}, 'sourceNote': {'type': 'string'}, 'modelSource': {'type': 'string'}, 'capabilities': {'type': 'object', 'additionalProperties': {'type': 'boolean'}}, 'modelFamilies': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'units': {'type': 'object', 'required': ['totals'], 'properties': {'totals': {'const': 'USD'}}, 'additionalProperties': False}, 'method': {'type': 'string'}, 'overlap': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'planIds'], 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'planIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'provenance': {'type': 'object', 'required': ['checked', 'sources'], 'properties': {'checked': {'type': 'string'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['planId', 'url', 'checked'], 'properties': {'url': {'type': 'string'}, 'planId': {'type': 'string'}, 'checked': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'annualTotal': {'type': 'number'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'monthlyTotal': {'type': 'number'}}, 'additionalProperties': False}
cron_next_runs
Cron next runs
Preview 1–10 cron matches strictly after a supplied UTC instant within 366 days, in an IANA time zone. Supports numeric stars, lists, ranges, steps and weekday names for GitHub, Cloudflare, Quartz and AWS dialects. L, W, # and named months are rejected. This does not install or run a schedule.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['expression', 'dialect', 'zone', 'after', 'count'], 'properties': {'zone': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'after': {'type': 'string', 'format': 'date-time', 'maxLength': 30, 'description': 'UTC ISO instant from 2000 through 2100; matches are strictly after this instant.'}, 'count': {'type': 'integer', 'maximum': 10, 'minimum': 1}, 'dialect': {'enum': ['github', 'cloudflare', 'quartz', 'aws'], 'type': 'string'}, 'expression': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['tool', 'input', 'method', 'assumptions', 'runs', 'searchDays', 'provenance'], 'properties': {'runs': {'type': 'array', 'items': {'type': 'object', 'required': ['startUtc', 'label'], 'properties': {'label': {'type': 'string'}, 'startUtc': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'maxItems': 10}, 'tool': {'const': 'cron-expression-generator'}, 'input': {'type': 'object', 'required': ['expression', 'dialect', 'zone', 'after', 'count'], 'properties': {'zone': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'after': {'type': 'string', 'format': 'date-time', 'maxLength': 30, 'description': 'UTC ISO instant from 2000 through 2100; matches are strictly after this instant.'}, 'count': {'type': 'integer', 'maximum': 10, 'minimum': 1}, 'dialect': {'enum': ['github', 'cloudflare', 'quartz', 'aws'], 'type': 'string'}, 'expression': {'type': 'string', 'pattern': '\\S', 'maxLength': 200, 'minLength': 1}}, 'additionalProperties': False}, 'method': {'type': 'string'}, 'provenance': {'type': 'object', 'required': ['sourceUrl', 'checked'], 'properties': {'checked': {'type': 'string'}, 'sourceUrl': {'type': 'string'}}, 'additionalProperties': False}, 'searchDays': {'const': 366}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
meeting_time_zones
Meeting time zones
Find 30-minute meeting times inside 09:00–17:00 for 2–8 people in IANA time zones. The date is local to the first person. Applies daylight saving changes; does not read calendars or send invitations.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['date', 'people'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Real date from 2000-01-01 to 2100-12-31.'}, 'people': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'zone'], 'properties': {'name': {'type': 'string', 'pattern': '\\S', 'maxLength': 80, 'minLength': 1}, 'zone': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1, 'description': 'An IANA time zone supported by Intl.DateTimeFormat, such as America/New_York.'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['tool', 'input', 'units', 'method', 'assumptions', 'provenance', 'rows', 'overlapCount', 'bestSlots'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'startUtc', 'inside', 'labels', 'score'], 'properties': {'score': {'type': 'number'}, 'start': {'type': 'integer', 'description': 'Unix epoch milliseconds.'}, 'inside': {'type': 'array', 'items': {'type': 'boolean'}}, 'labels': {'type': 'array', 'items': {'type': 'string'}}, 'startUtc': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}}, 'tool': {'const': 'meeting-time-zone-planner'}, 'input': {'type': 'object', 'required': ['date', 'people'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Real date from 2000-01-01 to 2100-12-31.'}, 'people': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'zone'], 'properties': {'name': {'type': 'string', 'pattern': '\\S', 'maxLength': 80, 'minLength': 1}, 'zone': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1, 'description': 'An IANA time zone supported by Intl.DateTimeFormat, such as America/New_York.'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}}, 'additionalProperties': False}, 'units': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'method': {'type': 'string'}, 'bestSlots': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'startUtc', 'inside', 'labels', 'score'], 'properties': {'score': {'type': 'number'}, 'start': {'type': 'integer', 'description': 'Unix epoch milliseconds.'}, 'inside': {'type': 'array', 'items': {'type': 'boolean'}}, 'labels': {'type': 'array', 'items': {'type': 'string'}}, 'startUtc': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'maxItems': 3}, 'provenance': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'overlapCount': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
recurring_schedule
Recurring schedule
Estimate monthly hours for weekly, biweekly and monthly tasks and return recurrence rules plus a complete RFC 5545 calendar. Use to prepare a schedule; no task is executed or calendar updated. Times float in the importing calendar’s local time zone.
Read only Idempotent
Input schema
{'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'}, 'time': {'type': 'string', 'pattern': '^([01][0-9]|2[0-3]):[0-5][0-9]$'}, 'owner': {'enum': ['delegate', 'keep', 'decide'], 'type': 'string'}, 'title': {'type': 'string', 'pattern': '\\S', 'maxLength': 80, 'minLength': 1}, 'minutes': {'type': 'integer', 'maximum': 1440, 'minimum': 1}, 'monthday': {'type': 'integer', 'maximum': 28, 'minimum': 1}, 'frequency': {'enum': ['weekly', 'biweekly', 'monthly'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 0}, 'startDate': {'type': 'string', 'format': 'date', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Real date from 2000-01-01 to 2100-12-31.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['tool', 'input', 'units', 'method', 'assumptions', 'provenance', 'monthlyHours', 'schedules', 'ics'], 'properties': {'ics': {'type': 'string', 'description': 'RFC 5545 calendar with CRLF folding and floating local times.'}, 'tool': {'const': 'recurring-task-planner'}, 'input': {'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'}, 'time': {'type': 'string', 'pattern': '^([01][0-9]|2[0-3]):[0-5][0-9]$'}, 'owner': {'enum': ['delegate', 'keep', 'decide'], 'type': 'string'}, 'title': {'type': 'string', 'pattern': '\\S', 'maxLength': 80, 'minLength': 1}, 'minutes': {'type': 'integer', 'maximum': 1440, 'minimum': 1}, 'monthday': {'type': 'integer', 'maximum': 28, 'minimum': 1}, 'frequency': {'enum': ['weekly', 'biweekly', 'monthly'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 0}, 'startDate': {'type': 'string', 'format': 'date', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Real date from 2000-01-01 to 2100-12-31.'}}, 'additionalProperties': False}, 'units': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'method': {'type': 'string'}, 'schedules': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'frequency', 'day', 'monthday', 'minutes', 'time', 'owner', 'firstDate', 'recurrenceRule'], 'properties': {'day': {'enum': ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'], 'type': 'string'}, 'time': {'type': 'string', 'pattern': '^([01][0-9]|2[0-3]):[0-5][0-9]$'}, 'owner': {'enum': ['delegate', 'keep', 'decide'], 'type': 'string'}, 'title': {'type': 'string', 'pattern': '\\S', 'maxLength': 80, 'minLength': 1}, 'minutes': {'type': 'integer', 'maximum': 1440, 'minimum': 1}, 'monthday': {'type': 'integer', 'maximum': 28, 'minimum': 1}, 'firstDate': {'type': 'string', 'format': 'date'}, 'frequency': {'enum': ['weekly', 'biweekly', 'monthly'], 'type': 'string'}, 'recurrenceRule': {'type': 'string'}}, 'additionalProperties': False}}, 'provenance': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'monthlyHours': {'type': 'number'}}, 'additionalProperties': False}
Added
cron_next_runs
Oct. 3, 2026, 2:40 a.m.
Added
ai_subscription_stack_cost
Oct. 3, 2026, 2:40 a.m.
Added
recurring_schedule
Oct. 3, 2026, 2:40 a.m.
Added
meeting_time_zones
Oct. 3, 2026, 2:40 a.m.
Added
ai_api_cost
Oct. 3, 2026, 2:40 a.m.