mcp-tools
The mcp-tools server provides five read-only, deterministic MCP tools for cost, time-zone, and scheduling estimates.
Estimate AI API token costs in USD per request, day, and month from token counts, caching, batch/long-context rates, and selected model IDs.
Find shared 30-minute meeting slots for 2–8 people within 09:00–17:00, ranked near each participant’s 13:00 local time, with UTC and local labels.
Generate weekly, biweekly, or monthly recurring task schedules with monthly hours, recurrence rules, and an RFC 5545 calendar for up to 20 tasks.
Calculate monthly and annual AI subscription stack totals and identify overlapping capabilities from bundled plan IDs.
Preview 1–10 cron matches after a UTC instant across GitHub, Cloudflare, Quartz, and AWS dialects within a 366-day search window.
Rely on normalized inputs, units, method, assumptions, dated provenance, and no network calls, event creation, schedule installation, or task execution.
Supports the Cloudflare cron dialect for previewing next scheduled runs, requiring UTC and returning UTC starts with local labels.
Supports the GitHub Actions cron dialect for previewing up to 10 next scheduled runs after a UTC instant, with UTC starts and local labels.
Estimates monthly and annual costs for ChatGPT Go, Plus, and Pro subscription plans, and identifies capability overlap with other selected AI subscriptions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-toolsWhat's the monthly cost of 2M input and 500K output tokens on GPT-4o?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OperatorNest tools
Hosted MCP endpoint: https://operatornest.com/mcp (Streamable HTTP, no API key).
Five deterministic cost, time-zone and scheduling calculations use bundled data and the same tool definitions over HTTP and stdio, returning normalized inputs, units, method, assumptions, dated sources and a link to open each result on OperatorNest. No network calls. The TypeScript source is included; calculations do not create events, install schedules or execute tasks.
Tool | Result |
| USD per request, day and month from token counts and selected model rates |
| Shared 30-minute slots within 09:00–17:00 for 2–8 people |
| Monthly hours, recurrence rules and an RFC 5545 calendar |
| Monthly and annual totals with overlapping capabilities |
| 1–10 matches after a UTC instant, within 366 days |
The justfile installs frozen dependencies, checks prerequisites and runs the build and tests:
just setup
just doctor
just checkSelf-hosting
For checkout development, run just setup to install Node 26 and pnpm 12. The published package supports Node.js 22.19 or newer.
git clone https://github.com/OperatorNest/mcp-tools.git
cd mcp-tools
pnpm install --frozen-lockfile
pnpm test:local
pnpm build
node dist/stdio.jsFor a client with stdio support, use node with the absolute path to dist/stdio.js as its argument to serve newline-delimited MCP messages on stdin/stdout, keeping protocol traffic separate from the logs written to stderr.
The package is prepared as @operatornest/mcp-tools version 1.1.0. To run a local package through npx before registry publication:
pnpm pack --out /tmp/operatornest-mcp-tools-1.1.0.tgz
npx --yes --package /tmp/operatornest-mcp-tools-1.1.0.tgz operatornest-mcp-toolsAfter npm publication, the equivalent command is npx --yes @operatornest/mcp-tools@1.1.0. Publication is a separate maintainer action.
HTTP Worker
src/worker.ts exports a standalone Worker with an /mcp endpoint. Use your own Worker configuration; wrangler.jsonc is a local starting point. Run it locally with:
pnpm dev:worker --port 8787Connect a client to http://localhost:8787/mcp. For remote hosting, follow the Worker setup documentation in your own account.
The HTTP handler uses stateless JSON responses without sessions or subscription streams, caps request bodies at 32 KiB, rejects JSON-RPC batches and returns generic errors, with CORS for HTTPS origins and local-origin access to local endpoints.
Rate limiting is optional. To enable it, configure an MCP_LIMITER rate-limit binding. When present, it uses a SHA-256 hash of CF-Connecting-IP; rejection returns HTTP 429 with Retry-After: 60. Missing client IP or a binding error returns HTTP 503. No binding means no rate limiting.
Related MCP server: Cron Parser API
Client setup
These snippets connect to the hosted endpoint. Substitute your own HTTPS /mcp URL to use your HTTP instance. Setup documentation checked on 2 October 2026; account and workspace controls may affect tool access.
ChatGPT
Enable Developer mode in Settings → Security and login. In Plugins, use the plus button to create a developer-mode app with this URL and No Authentication:
https://operatornest.com/mcpSelect the app from Developer mode in the conversation's plus menu. Official instructions.
Claude
In Claude, open Customize → Connectors, select Add custom connector, and enter https://operatornest.com/mcp. Choose No sign in and add the connector. Enable it for your conversation from the plus menu's Connectors list. Organization owners may need to add it first. Official connector instructions.
For Claude Code:
claude mcp add --transport http operatornest https://operatornest.com/mcpCheck the connection with /mcp. Official instructions.
Codex
codex mcp add operatornest --url https://operatornest.com/mcpAlternatively, in ~/.codex/config.toml:
[mcp_servers.operatornest]
url = "https://operatornest.com/mcp"Cursor
Add to .cursor/mcp.json in your project, or ~/.cursor/mcp.json for all projects:
{
"mcpServers": {
"operatornest": { "url": "https://operatornest.com/mcp" }
}
}Gemini CLI
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"operatornest": { "httpUrl": "https://operatornest.com/mcp" }
}
}VS Code
Add .vscode/mcp.json to your project:
{
"servers": {
"operatornest": { "type": "http", "url": "https://operatornest.com/mcp" }
}
}Start the server from the configuration file and enable its tools in Agent mode. Official instructions.
Data and limits
API rates are frozen at 2026-09-28T17:08:16.340Z in src/data/pricing-snapshot.json, containing 194 models from models.dev. This is the hosted MCP's filtered snapshot. Use the bundled modelId values; the broader website catalog can include records this server does not accept. Null rates stay unlisted. Caching falls back to the input rate when absent; batch discounts require published data. Non-token charges are excluded.
Subscription plans are in src/data/ai-plans.ts, checked on 27 September 2026 with official source links. Annual totals use published annual charges, or twelve monthly charges when no annual charge is listed. Taxes, regional differences and promotions are excluded.
Meeting and cron results use the runtime's IANA time-zone database. Recurring calendars use floating local times in the importing calendar. Cron supports numeric stars, lists, ranges, steps and weekday names across GitHub, Cloudflare, Quartz and AWS dialects; L, W, # and named months are rejected. Results describe estimates and schedule previews.
Development
pnpm check
pnpm test:local
pnpm build
pnpm dlx @modelcontextprotocol/inspector --cli node dist/stdio.js \
--method tools/call --tool-name cron_next_runs \
--tool-arg 'expression=0 9 * * 1-5' --tool-arg dialect=github \
--tool-arg zone=UTC --tool-arg after=2026-10-02T00:00:00Z --tool-arg count=1Tests validate input and output schemas, valid and invalid calls, HTTP limits, and initialize/list/call on both transports. See Inspector CLI documentation, contribution guidance, security reporting and data attribution.
MIT. Copyright (c) 2026 OperatorNest.
Available Tools
5 toolsai_api_costAI API costARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modelIds | Yes | Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation. | |
| inputTokens | Yes | Total input tokens per request, including cached input tokens. | |
| outputTokens | Yes | Generated output tokens per request. | |
| batchModelIds | No | Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected. | |
| requestsPerDay | Yes | Requests used to scale the daily estimate, independent of requestsPerMonth. | |
| requestsPerMonth | Yes | Requests used to scale the monthly estimate; not inferred from the daily count. | |
| cachedInputTokens | Yes | Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Calculator identifier for this result. |
| input | Yes | Normalized inputs used for this calculation. |
| units | Yes | Units for the numeric and time fields in this result. |
| method | Yes | Calculation or ranking method applied to the inputs. |
| estimates | Yes | Cost estimates in selected-model order. |
| provenance | Yes | Dated data sources or runtime time-zone information used for this result. |
| assumptions | Yes | Limits and assumptions to retain when presenting the result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a safe, offline, idempotent read, and the description adds real behavioral context beyond them: rates stay offline until the catalog updates, missing rates return null, cached tokens count inside total input, batch/long-context rates apply only when eligible, and non-token charges are excluded. These are exactly the operational caveats an agent needs to interpret results.
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 the core purpose before caveats, and every sentence carries information. Some sentences bundle several distinct caveats (cached tokens + batch rates + non-token charges), which makes it dense but not padded.
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?
Covers provenance, failure behavior (null on missing rates), and pricing-eligibility edge cases for a 7-parameter estimation tool, and an output schema exists so return shape need not be described. Minor gaps remain around how the per-day/month windows are defined and whether zero-request inputs are valid.
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 already 100%, so the baseline is 3. The description adds cross-field meaning the schema does not spell out: modelIds follow providerId/id from a specific catalog, rates are dated snapshots, and batch eligibility is conditional. It stops short of explaining the interaction between requestsPerDay and requestsPerMonth beyond what the schema already states.
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 (Estimate), resource (API workload costs), unit (USD), and scope (per request, day, month), plus provenance. It explicitly distinguishes itself from the sibling ai_subscription_stack_cost, so an agent can route between them 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 positive trigger (token budgets) and a named alternative with the condition that selects it (ai_subscription_stack_cost for chat or coding subscriptions). It also tells the agent where valid model IDs come from (the pricing catalog endpoint / OSS snapshot file).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_subscription_stack_costAI subscription stack costARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| planIds | Yes | Unique subscription IDs from the enum. An empty list returns zero totals and no selected plans. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Calculator identifier for this result. |
| input | Yes | Normalized inputs used for this calculation. |
| plans | Yes | Selected plans with published USD charges and dated sources, in input order. |
| units | Yes | Units for the numeric and time fields in this result. |
| method | Yes | Calculation or ranking method applied to the inputs. |
| overlap | Yes | Capability groups and selected plan IDs; more than one plan ID indicates overlap. |
| provenance | Yes | Dated data sources or runtime time-zone information used for this result. |
| annualTotal | Yes | Sum of published annual charges or twelve monthly charges per plan; excludes taxes, regional changes and promotions. |
| assumptions | Yes | Limits and assumptions to retain when presenting the result. |
| monthlyTotal | Yes | Sum of selected monthly USD charges; zero for an empty stack. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/no-write): it discloses how annual totals are derived, that taxes/regional differences/promotions are excluded, that bundled rates are dated estimates, and that no live billing lookup or subscription mutation occurs. That is exactly the behavioral context an agent needs before quoting numbers to a user.
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?
Five dense sentences with no filler, and the primary purpose plus sibling routing are front-loaded. It is information-heavy and could use light grouping, but every sentence carries operational 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?
An output schema exists, so return values need not be described, yet the description still sketches the return shape (totals, selected plans, capability groups, dated sources) and bounds the accuracy of its numbers. Nothing material is missing for invoking 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 the enum already enumerates valid planIds, so the baseline is 3. The description adds genuine meaning beyond the schema: the 'unique' constraint, the empty-list semantics ('[] returns zero totals'), and the requirement to select IDs from the enum rather than free-text plan names.
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+resource (compute total cost of selected AI chat/coding subscriptions) plus the analytical add-on (identify overlapping capabilities). It explicitly distinguishes itself from the sibling ai_api_cost, so an agent can route without opening either 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?
Names the scenario ('use to review a subscription stack') and the alternative with its condition ('use ai_api_cost for API token charges'). It also covers the degenerate input case ('[] returns zero totals and no plans'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_next_runsCron next runsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | Yes | IANA time zone for matching local cron fields. cloudflare requires UTC. Daylight saving transitions follow the runtime time-zone database. | |
| after | Yes | UTC ISO instant from 2000 through 2100; matches are strictly after this instant. Only Z offsets are accepted. | |
| count | Yes | Maximum matches to return. The list may be shorter or empty if no further matches occur within the 366-day search. | |
| dialect | Yes | 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 | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | Yes | Chronological cron matches strictly after after, up to count; may be shorter or empty within the search window. |
| tool | Yes | Calculator identifier for this result. |
| input | Yes | Normalized inputs used for this calculation. |
| method | Yes | Calculation or ranking method applied to the inputs. |
| provenance | Yes | Dated data sources or runtime time-zone information used for this result. |
| searchDays | Yes | Maximum search window in days. |
| assumptions | Yes | Limits and assumptions to retain when presenting the result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, and the description adds substantial extra context: no schedule is installed or run, the 366-day window bound, that fewer matches or [] means the window ended, dialect-specific rejection rules (L, W, #, named months), and that cloudflare requires UTC while other zones follow runtime DST transitions.
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?
Purpose and window bound are front-loaded, and each subsequent sentence carries a distinct constraint (dialect limits, zone rules, no side effects). It is dense but not padded, though the return-shape sentence is partly redundant with the output schema.
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 read-only preview tool with full schema coverage and an output schema, the description covers everything an agent needs: what is matched, the search bound, dialect/zone caveats, and the absence of side effects. The return-value sentence is extra but harmless.
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 schema already documents dialect numbering, the ? requirement for quartz/aws, the Z-only constraint on 'after', and the 366-day/count semantics. The description largely restates these ('Supports numeric stars, lists, ranges, steps and weekday names... rejects L, W, # and named months'), so it earns the baseline 3 rather than more.
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 ('Preview up to 10 cron matches strictly after a supplied UTC instant, within a 366-day search') and explicitly distinguishes itself from siblings recurring_schedule and meeting_time_zones by naming what each of those is for instead.
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 explicit when-to-use ('Use to check existing scheduler syntax') plus named alternatives with their selecting conditions ('recurring_schedule to draft task recurrence calendars or meeting_time_zones for participant overlap'), so routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meeting_time_zonesMeeting time zonesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date in the first person’s local time zone, from 2000-01-01 to 2100-12-31. | |
| people | Yes | Participants in display order. The first person determines the local date; all must fit a full half-hour inside 09:00–17:00. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | All candidate half-hour starts on the first participant’s local date, in chronological order. |
| tool | Yes | Calculator identifier for this result. |
| input | Yes | Normalized inputs used for this calculation. |
| units | Yes | Units for the numeric and time fields in this result. |
| method | Yes | Calculation or ranking method applied to the inputs. |
| bestSlots | Yes | Up to three shared slots ranked by score, then earliest UTC start; [] means no overlap. |
| provenance | Yes | Dated data sources or runtime time-zone information used for this result. |
| assumptions | Yes | Limits and assumptions to retain when presenting the result. |
| overlapCount | Yes | Number of candidate slots inside every participant’s workday. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description adds real behavioral context beyond that: DST resolved via runtime IANA data, the date belonging to the first participant's zone, and the ranking heuristic (nearest each person's 13:00). Slightly short of 5 only because pagination/limits on candidate count aren't addressed.
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 core purpose, then alternatives, then return shape and edge cases. Four tight sentences, each carrying distinct information with no redundancy or filler.
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 needn't be re-explained, and annotations cover safety. The description still fills the remaining gaps an agent needs – DST handling, date-zone anchoring, ranking rule, and explicit out-of-scope operations – making it complete for a two-parameter read tool.
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 the baseline is 3 and the schema carries the syntax. The description nonetheless reinforces semantics that matter for interpretation – that the date is anchored to the first participant's zone and that participants are ordered with the first determining the local date – which clarifies intent beyond raw field definitions.
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 (Find) and resource (shared 30-minute meeting slots) with concrete scope: 09:00–17:00 window and 2–8 participants. It explicitly names sibling tools (recurring_schedule, cron_next_runs) so the agent can distinguish it 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 positive guidance ("Use to compare workday overlap") and routes to alternatives by condition (recurring_schedule for repeating task calendars, cron_next_runs for scheduler previews). It also states what it is not for: calendar availability, holiday lookup, invitations, or calendar writes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recurring_scheduleRecurring scheduleARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | Tasks to include in the estimate and calendar. [] returns zero hours and a calendar with no events. | |
| startDate | Yes | Earliest date for the first occurrence of each task, from 2000-01-01 to 2100-12-31. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ics | Yes | RFC 5545 calendar with CRLF folding and floating local times. |
| tool | Yes | Calculator identifier for this result. |
| input | Yes | Normalized inputs used for this calculation. |
| units | Yes | Units for the numeric and time fields in this result. |
| method | Yes | Calculation or ranking method applied to the inputs. |
| schedules | Yes | Normalized tasks with their first occurrence and recurrence rule, in input order. |
| provenance | Yes | Dated data sources or runtime time-zone information used for this result. |
| assumptions | Yes | Limits and assumptions to retain when presenting the result. |
| monthlyHours | Yes | Estimated monthly hours using 52/12 weekly, 26/12 biweekly and one monthly run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description goes further: 'No calendar is updated', empty task list yields zero hours and no events, times float in the importing calendar's local zone, and owner is only a planning label with no assignment or execution. It also discloses the estimation math (52/12 weekly, 26/12 biweekly), which no annotation or schema field conveys.
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?
Five tight sentences, front-loaded with the primary action and scope before alternatives and caveats; every sentence carries distinct information (alternatives, return shape, time semantics, estimation math, no-side-effect guarantee). Dense but not padded, though the return-value sentence overlaps with the output schema.
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 2-parameter tool with full schema coverage and an output schema, this covers everything an agent needs: what it produces, how effort is estimated, time-zone behavior, side-effect absence, and the empty-input edge case. Nothing material 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?
Schema coverage is 100%, so the baseline is 3 and the schema already documents day/monthday/time/owner semantics. The description still adds value the schema does not: the 52/12 and 26/12 runs-per-month estimation formula and the floating-time-zone interpretation of the produced times, which is what an agent needs to predict output. Slightly above baseline.
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 ('Prepare... estimate') and resource ('weekly, biweekly or monthly task calendars'), plus the scope bound of 20 tasks. It names siblings cron_next_runs and meeting_time_zones so the agent can separate this planning tool from the cron-preview and timezone tools 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?
Explicitly says to use it 'to draft a recurring work plan' and routes to alternatives by condition: cron_next_runs for existing cron syntax, meeting_time_zones for shared workday slots. When-to-use and which-alternative are both stated, not inferred.
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.
5 tool updates
v1.1.0- Changed
ai_api_cost53 fields changed- changed
Input schema / properties / batchModelIds / descriptionPrevious value: -"Optional model IDs using a published batch discount."New value: +"Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected." - added
Input schema / properties / batchModelIds / examplesAdded value: +[ + [] +] - added
Input schema / properties / batchModelIds / items / descriptionAdded value: +"Selected model ID with a published batch discount." - added
Input schema / properties / cachedInputTokens / descriptionAdded value: +"Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching." - added
Input schema / properties / cachedInputTokens / examplesAdded value: +[ + 5000 +] - added
Input schema / properties / inputTokens / descriptionAdded value: +"Total input tokens per request, including cached input tokens." - added
Input schema / properties / inputTokens / examplesAdded value: +[ + 10000 +] - added
Input schema / properties / modelIds / descriptionAdded value: +"Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation." - added
Input schema / properties / modelIds / items / descriptionAdded value: +"Model ID accepted by the MCP pricing catalog." - added
Input schema / properties / outputTokens / descriptionAdded value: +"Generated output tokens per request." - added
Input schema / properties / outputTokens / examplesAdded value: +[ + 2000 +] - added
Input schema / properties / requestsPerDay / descriptionAdded value: +"Requests used to scale the daily estimate, independent of requestsPerMonth." - added
Input schema / properties / requestsPerDay / examplesAdded value: +[ + 100 +] - added
Input schema / properties / requestsPerMonth / descriptionAdded value: +"Requests used to scale the monthly estimate; not inferred from the daily count." - added
Input schema / properties / requestsPerMonth / examplesAdded value: +[ + 3000 +] - added
Output schema / descriptionAdded value: +"API token cost estimates with normalized inputs, USD units, rate assumptions and catalog snapshot provenance." - added
Output schema / properties / assumptions / descriptionAdded value: +"Limits and assumptions to retain when presenting the result." - added
Output schema / properties / estimates / descriptionAdded value: +"Cost estimates in selected-model order." - added
Output schema / properties / estimates / items / properties / batch / descriptionAdded value: +"Whether a requested published batch discount was applied." - added
Output schema / properties / estimates / items / properties / longContext / descriptionAdded value: +"Whether published long-context rate multipliers apply." - added
Output schema / properties / estimates / items / properties / modelId / descriptionAdded value: +"Selected providerId/id from the pricing catalog." - added
Output schema / properties / estimates / items / properties / name / descriptionAdded value: +"Display name of the selected model or plan." - added
Output schema / properties / estimates / items / properties / note / descriptionAdded value: +"Catalog note about pricing limitations." - added
Output schema / properties / estimates / items / properties / perDay / descriptionAdded value: +"Estimated USD per day at requestsPerDay; null when rates are unlisted." - added
Output schema / properties / estimates / items / properties / perMonth / descriptionAdded value: +"Estimated USD per month at requestsPerMonth; null when rates are unlisted." - added
Output schema / properties / estimates / items / properties / perRequest / descriptionAdded value: +"Estimated USD per request; null when any required rate is unlisted." - added
Output schema / properties / estimates / items / properties / ratesPerMillion / descriptionAdded value: +"USD rates per million tokens after long-context multipliers, before batch discounts; null means unlisted." - added
Output schema / properties / estimates / items / properties / ratesPerMillion / properties / cachedInput / descriptionAdded value: +"Cached-input USD rate per million tokens; falls back to the input rate when absent." - added
Output schema / properties / estimates / items / properties / ratesPerMillion / properties / input / descriptionAdded value: +"Uncached-input USD rate per million tokens; null means unlisted." - added
Output schema / properties / estimates / items / properties / ratesPerMillion / properties / output / descriptionAdded value: +"Output USD rate per million tokens; null means unlisted." - added
Output schema / properties / estimates / items / properties / sourceUrl / descriptionAdded value: +"Official rate or scheduler syntax reference URL." - added
Output schema / properties / input / descriptionAdded value: +"Normalized inputs used for this calculation." - changed
Output schema / properties / input / properties / batchModelIds / descriptionPrevious value: -"Optional model IDs using a published batch discount."New value: +"Optional subset of modelIds to price with published batch discounts. Omission or [] uses standard rates; IDs without a published discount are rejected." - added
Output schema / properties / input / properties / batchModelIds / examplesAdded value: +[ + [] +] - added
Output schema / properties / input / properties / batchModelIds / items / descriptionAdded value: +"Selected model ID with a published batch discount." - added
Output schema / properties / input / properties / cachedInputTokens / descriptionAdded value: +"Cached portion of inputTokens per request; must not exceed inputTokens. Use 0 without caching." - added
Output schema / properties / input / properties / cachedInputTokens / examplesAdded value: +[ + 5000 +] - added
Output schema / properties / input / properties / inputTokens / descriptionAdded value: +"Total input tokens per request, including cached input tokens." - added
Output schema / properties / input / properties / inputTokens / examplesAdded value: +[ + 10000 +] - added
Output schema / properties / input / properties / modelIds / descriptionAdded value: +"Unique providerId/id values from the MCP pricing catalog. Unknown or unavailable IDs fail validation." - added
Output schema / properties / input / properties / modelIds / items / descriptionAdded value: +"Model ID accepted by the MCP pricing catalog." - added
Output schema / properties / input / properties / outputTokens / descriptionAdded value: +"Generated output tokens per request." - added
Output schema / properties / input / properties / outputTokens / examplesAdded value: +[ + 2000 +] - added
Output schema / properties / input / properties / requestsPerDay / descriptionAdded value: +"Requests used to scale the daily estimate, independent of requestsPerMonth." - added
Output schema / properties / input / properties / requestsPerDay / examplesAdded value: +[ + 100 +] - added
Output schema / properties / input / properties / requestsPerMonth / descriptionAdded value: +"Requests used to scale the monthly estimate; not inferred from the daily count." - added
Output schema / properties / input / properties / requestsPerMonth / examplesAdded value: +[ + 3000 +] - added
Output schema / properties / method / descriptionAdded value: +"Calculation or ranking method applied to the inputs." - added
Output schema / properties / provenance / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / provenance / descriptionAdded value: +"Dated data sources or runtime time-zone information used for this result." - added
Output schema / properties / tool / descriptionAdded value: +"Calculator identifier for this result." - added
Output schema / properties / units / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / units / descriptionAdded value: +"Units for the numeric and time fields in this result."
- Changed
ai_subscription_stack_cost39 fields changed- added
Input schema / properties / planIds / descriptionAdded value: +"Unique subscription IDs from the enum. An empty list returns zero totals and no selected plans." - added
Input schema / properties / planIds / examplesAdded value: +[ + [ + "chatgpt-plus", + "claude-pro" + ], + [] +] - added
Input schema / properties / planIds / items / descriptionAdded value: +"ID of a plan in the bundled subscription catalog." - added
Output schema / descriptionAdded value: +"Subscription totals, capability overlap and dated plan sources with normalized selection." - added
Output schema / properties / annualTotal / descriptionAdded value: +"Sum of published annual charges or twelve monthly charges per plan; excludes taxes, regional changes and promotions." - added
Output schema / properties / assumptions / descriptionAdded value: +"Limits and assumptions to retain when presenting the result." - added
Output schema / properties / input / descriptionAdded value: +"Normalized inputs used for this calculation." - added
Output schema / properties / input / properties / planIds / descriptionAdded value: +"Unique subscription IDs from the enum. An empty list returns zero totals and no selected plans." - added
Output schema / properties / input / properties / planIds / examplesAdded value: +[ + [ + "chatgpt-plus", + "claude-pro" + ], + [] +] - added
Output schema / properties / input / properties / planIds / items / descriptionAdded value: +"ID of a plan in the bundled subscription catalog." - added
Output schema / properties / method / descriptionAdded value: +"Calculation or ranking method applied to the inputs." - added
Output schema / properties / monthlyTotal / descriptionAdded value: +"Sum of selected monthly USD charges; zero for an empty stack." - added
Output schema / properties / overlap / descriptionAdded value: +"Capability groups and selected plan IDs; more than one plan ID indicates overlap." - added
Output schema / properties / overlap / items / properties / id / descriptionAdded value: +"Catalog identifier for a plan or capability." - added
Output schema / properties / overlap / items / properties / label / descriptionAdded value: +"Human-readable capability label." - added
Output schema / properties / overlap / items / properties / planIds / descriptionAdded value: +"Selected plans offering this capability; more than one ID indicates overlap." - added
Output schema / properties / plans / descriptionAdded value: +"Selected plans with published USD charges and dated sources, in input order." - added
Output schema / properties / plans / items / properties / annual / descriptionAdded value: +"Published USD annual charge; null if only monthly billing is listed." - added
Output schema / properties / plans / items / properties / annualNote / descriptionAdded value: +"Qualification about annual billing." - added
Output schema / properties / plans / items / properties / capabilities / additionalProperties / descriptionAdded value: +"Whether the plan offers this capability." - added
Output schema / properties / plans / items / properties / capabilities / descriptionAdded value: +"Capability IDs mapped to whether the selected plan includes them." - added
Output schema / properties / plans / items / properties / checked / descriptionAdded value: +"Date the referenced catalog or scheduler source was checked." - added
Output schema / properties / plans / items / properties / id / descriptionAdded value: +"Catalog identifier for a plan or capability." - added
Output schema / properties / plans / items / properties / modelFamilies / descriptionAdded value: +"Model family labels listed for the plan." - added
Output schema / properties / plans / items / properties / modelSource / descriptionAdded value: +"Official source for plan model access." - added
Output schema / properties / plans / items / properties / monthly / descriptionAdded value: +"Published USD monthly charge." - added
Output schema / properties / plans / items / properties / name / descriptionAdded value: +"Display name of the selected model or plan." - added
Output schema / properties / plans / items / properties / provider / descriptionAdded value: +"Public subscription provider name." - added
Output schema / properties / plans / items / properties / source / descriptionAdded value: +"Official plan pricing URL." - added
Output schema / properties / plans / items / properties / sourceNote / descriptionAdded value: +"Qualification about the source or plan availability." - added
Output schema / properties / provenance / descriptionAdded value: +"Dated data sources or runtime time-zone information used for this result." - added
Output schema / properties / provenance / properties / checked / descriptionAdded value: +"Date the referenced catalog or scheduler source was checked." - added
Output schema / properties / provenance / properties / sources / descriptionAdded value: +"Official pricing sources for the selected plans." - added
Output schema / properties / provenance / properties / sources / items / properties / checked / descriptionAdded value: +"Date the referenced catalog or scheduler source was checked." - added
Output schema / properties / provenance / properties / sources / items / properties / planId / descriptionAdded value: +"Selected plan ID corresponding to this source." - added
Output schema / properties / provenance / properties / sources / items / properties / url / descriptionAdded value: +"Official plan pricing URL." - added
Output schema / properties / tool / descriptionAdded value: +"Calculator identifier for this result." - added
Output schema / properties / units / descriptionAdded value: +"Units for the numeric and time fields in this result." - added
Output schema / properties / units / properties / totals / descriptionAdded value: +"Currency for subscription totals."
- Changed
cron_next_runs38 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"UTC ISO instant from 2000 through 2100; matches are strictly after this instant."New value: +"UTC ISO instant from 2000 through 2100; matches are strictly after this instant. Only Z offsets are accepted." - added
Input schema / properties / after / examplesAdded value: +[ + "2026-10-02T00:00:00Z" +] - changed
Input schema / properties / after / maxLengthPrevious value: -30New value: +24 - added
Input schema / properties / after / minLengthAdded value: +20 - added
Input schema / properties / after / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$" - added
Input schema / properties / count / descriptionAdded value: +"Maximum matches to return. The list may be shorter or empty if no further matches occur within the 366-day search." - added
Input schema / properties / count / examplesAdded value: +[ + 3 +] - added
Input schema / properties / dialect / descriptionAdded value: +"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." - added
Input schema / properties / dialect / examplesAdded value: +[ + "github" +] - added
Input schema / properties / expression / descriptionAdded value: +"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." - added
Input schema / properties / expression / examplesAdded value: +[ + "0 9 * * 1-5" +] - added
Input schema / properties / zone / descriptionAdded value: +"IANA time zone for matching local cron fields. cloudflare requires UTC. Daylight saving transitions follow the runtime time-zone database." - added
Input schema / properties / zone / examplesAdded value: +[ + "UTC", + "America/New_York" +] - added
Output schema / descriptionAdded value: +"Bounded cron preview with normalized syntax, UTC starts, local labels and scheduler source." - added
Output schema / properties / assumptions / descriptionAdded value: +"Limits and assumptions to retain when presenting the result." - added
Output schema / properties / input / descriptionAdded value: +"Normalized inputs used for this calculation." - changed
Output schema / properties / input / properties / after / descriptionPrevious value: -"UTC ISO instant from 2000 through 2100; matches are strictly after this instant."New value: +"UTC ISO instant from 2000 through 2100; matches are strictly after this instant. Only Z offsets are accepted." - added
Output schema / properties / input / properties / after / examplesAdded value: +[ + "2026-10-02T00:00:00Z" +] - changed
Output schema / properties / input / properties / after / maxLengthPrevious value: -30New value: +24 - added
Output schema / properties / input / properties / after / minLengthAdded value: +20 - added
Output schema / properties / input / properties / after / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$" - added
Output schema / properties / input / properties / count / descriptionAdded value: +"Maximum matches to return. The list may be shorter or empty if no further matches occur within the 366-day search." - added
Output schema / properties / input / properties / count / examplesAdded value: +[ + 3 +] - added
Output schema / properties / input / properties / dialect / descriptionAdded value: +"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." - added
Output schema / properties / input / properties / dialect / examplesAdded value: +[ + "github" +] - added
Output schema / properties / input / properties / expression / descriptionAdded value: +"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." - added
Output schema / properties / input / properties / expression / examplesAdded value: +[ + "0 9 * * 1-5" +] - added
Output schema / properties / input / properties / zone / descriptionAdded value: +"IANA time zone for matching local cron fields. cloudflare requires UTC. Daylight saving transitions follow the runtime time-zone database." - added
Output schema / properties / input / properties / zone / examplesAdded value: +[ + "UTC", + "America/New_York" +] - added
Output schema / properties / method / descriptionAdded value: +"Calculation or ranking method applied to the inputs." - added
Output schema / properties / provenance / descriptionAdded value: +"Dated data sources or runtime time-zone information used for this result." - added
Output schema / properties / provenance / properties / checked / descriptionAdded value: +"Date the referenced catalog or scheduler source was checked." - added
Output schema / properties / provenance / properties / sourceUrl / descriptionAdded value: +"Official rate or scheduler syntax reference URL." - added
Output schema / properties / runs / descriptionAdded value: +"Chronological cron matches strictly after after, up to count; may be shorter or empty within the search window." - added
Output schema / properties / runs / items / properties / label / descriptionAdded value: +"Start formatted in the requested IANA time zone." - added
Output schema / properties / runs / items / properties / startUtc / descriptionAdded value: +"Start instant in ISO 8601 UTC." - added
Output schema / properties / searchDays / descriptionAdded value: +"Maximum search window in days." - added
Output schema / properties / tool / descriptionAdded value: +"Calculator identifier for this result."
- Changed
meeting_time_zones38 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Real date from 2000-01-01 to 2100-12-31."New value: +"Meeting date in the first person’s local time zone, from 2000-01-01 to 2100-12-31." - added
Input schema / properties / date / examplesAdded value: +[ + "2026-10-05" +] - added
Input schema / properties / date / maxLengthAdded value: +10 - added
Input schema / properties / date / minLengthAdded value: +10 - added
Input schema / properties / people / descriptionAdded value: +"Participants in display order. The first person determines the local date; all must fit a full half-hour inside 09:00–17:00." - added
Input schema / properties / people / items / properties / name / descriptionAdded value: +"Participant label used in the returned local-time display." - added
Input schema / properties / people / items / properties / name / examplesAdded value: +[ + "Sam" +] - changed
Input schema / properties / people / items / properties / zone / descriptionPrevious value: -"An IANA time zone supported by Intl.DateTimeFormat, such as America/New_York."New value: +"IANA time zone supported by Intl.DateTimeFormat." - added
Input schema / properties / people / items / properties / zone / examplesAdded value: +[ + "America/New_York", + "Asia/Kolkata" +] - added
Output schema / descriptionAdded value: +"Meeting candidates and ranked shared slots with normalized participants, local labels and DST assumptions." - added
Output schema / properties / assumptions / descriptionAdded value: +"Limits and assumptions to retain when presenting the result." - added
Output schema / properties / bestSlots / descriptionAdded value: +"Up to three shared slots ranked by score, then earliest UTC start; [] means no overlap." - added
Output schema / properties / bestSlots / items / properties / inside / descriptionAdded value: +"Whether each participant’s full half-hour fits their 09:00–17:00 workday, in input order." - added
Output schema / properties / bestSlots / items / properties / labels / descriptionAdded value: +"Local start labels for participants in input order." - added
Output schema / properties / bestSlots / items / properties / score / descriptionAdded value: +"Sum of absolute hours from 13:00 at each participant’s slot midpoint; lower ranks first." - added
Output schema / properties / bestSlots / items / properties / startUtc / descriptionAdded value: +"Start instant in ISO 8601 UTC." - added
Output schema / properties / input / descriptionAdded value: +"Normalized inputs used for this calculation." - changed
Output schema / properties / input / properties / date / descriptionPrevious value: -"Real date from 2000-01-01 to 2100-12-31."New value: +"Meeting date in the first person’s local time zone, from 2000-01-01 to 2100-12-31." - added
Output schema / properties / input / properties / date / examplesAdded value: +[ + "2026-10-05" +] - added
Output schema / properties / input / properties / date / maxLengthAdded value: +10 - added
Output schema / properties / input / properties / date / minLengthAdded value: +10 - added
Output schema / properties / input / properties / people / descriptionAdded value: +"Participants in display order. The first person determines the local date; all must fit a full half-hour inside 09:00–17:00." - added
Output schema / properties / input / properties / people / items / properties / name / descriptionAdded value: +"Participant label used in the returned local-time display." - added
Output schema / properties / input / properties / people / items / properties / name / examplesAdded value: +[ + "Sam" +] - changed
Output schema / properties / input / properties / people / items / properties / zone / descriptionPrevious value: -"An IANA time zone supported by Intl.DateTimeFormat, such as America/New_York."New value: +"IANA time zone supported by Intl.DateTimeFormat." - added
Output schema / properties / input / properties / people / items / properties / zone / examplesAdded value: +[ + "America/New_York", + "Asia/Kolkata" +] - added
Output schema / properties / method / descriptionAdded value: +"Calculation or ranking method applied to the inputs." - added
Output schema / properties / overlapCount / descriptionAdded value: +"Number of candidate slots inside every participant’s workday." - added
Output schema / properties / provenance / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / provenance / descriptionAdded value: +"Dated data sources or runtime time-zone information used for this result." - added
Output schema / properties / rows / descriptionAdded value: +"All candidate half-hour starts on the first participant’s local date, in chronological order." - added
Output schema / properties / rows / items / properties / inside / descriptionAdded value: +"Whether each participant’s full half-hour fits their 09:00–17:00 workday, in input order." - added
Output schema / properties / rows / items / properties / labels / descriptionAdded value: +"Local start labels for participants in input order." - added
Output schema / properties / rows / items / properties / score / descriptionAdded value: +"Sum of absolute hours from 13:00 at each participant’s slot midpoint; lower ranks first." - added
Output schema / properties / rows / items / properties / startUtc / descriptionAdded value: +"Start instant in ISO 8601 UTC." - added
Output schema / properties / tool / descriptionAdded value: +"Calculator identifier for this result." - added
Output schema / properties / units / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / units / descriptionAdded value: +"Units for the numeric and time fields in this result."
- Changed
recurring_schedule65 fields changed- changed
Input schema / properties / startDate / descriptionPrevious value: -"Real date from 2000-01-01 to 2100-12-31."New value: +"Earliest date for the first occurrence of each task, from 2000-01-01 to 2100-12-31." - added
Input schema / properties / startDate / examplesAdded value: +[ + "2026-10-05" +] - added
Input schema / properties / startDate / maxLengthAdded value: +10 - added
Input schema / properties / startDate / minLengthAdded value: +10 - added
Input schema / properties / tasks / descriptionAdded value: +"Tasks to include in the estimate and calendar. [] returns zero hours and a calendar with no events." - added
Input schema / properties / tasks / items / properties / day / descriptionAdded value: +"Weekday for weekly/biweekly tasks. Required but ignored for monthly tasks." - added
Input schema / properties / tasks / items / properties / day / examplesAdded value: +[ + "MO" +] - added
Input schema / properties / tasks / items / properties / frequency / descriptionAdded value: +"Repeat every week, every two weeks from the first matching weekday, or every month." - added
Input schema / properties / tasks / items / properties / minutes / descriptionAdded value: +"Estimated minutes per run; used for event duration and monthly hours." - added
Input schema / properties / tasks / items / properties / minutes / examplesAdded value: +[ + 35 +] - added
Input schema / properties / tasks / items / properties / monthday / descriptionAdded value: +"Day of month for monthly tasks, limited to dates present in every month. Required but ignored for weekly/biweekly tasks." - added
Input schema / properties / tasks / items / properties / monthday / examplesAdded value: +[ + 1 +] - added
Input schema / properties / tasks / items / properties / owner / descriptionAdded value: +"Planning label: delegate to an operator, keep for yourself, or decide later. Included in the calendar note; does not assign or execute work." - added
Input schema / properties / tasks / items / properties / time / descriptionAdded value: +"24-hour HH:mm start time, floating in the importing calendar’s local time zone." - added
Input schema / properties / tasks / items / properties / time / examplesAdded value: +[ + "09:00" +] - added
Input schema / properties / tasks / items / properties / time / maxLengthAdded value: +5 - added
Input schema / properties / tasks / items / properties / time / minLengthAdded value: +5 - added
Input schema / properties / tasks / items / properties / title / descriptionAdded value: +"Task label used as the calendar event summary." - added
Input schema / properties / tasks / items / properties / title / examplesAdded value: +[ + "Investor update" +] - added
Output schema / descriptionAdded value: +"Monthly effort estimate, normalized recurrence rules and an importable floating-time calendar." - added
Output schema / properties / assumptions / descriptionAdded value: +"Limits and assumptions to retain when presenting the result." - added
Output schema / properties / input / descriptionAdded value: +"Normalized inputs used for this calculation." - changed
Output schema / properties / input / properties / startDate / descriptionPrevious value: -"Real date from 2000-01-01 to 2100-12-31."New value: +"Earliest date for the first occurrence of each task, from 2000-01-01 to 2100-12-31." - added
Output schema / properties / input / properties / startDate / examplesAdded value: +[ + "2026-10-05" +] - added
Output schema / properties / input / properties / startDate / maxLengthAdded value: +10 - added
Output schema / properties / input / properties / startDate / minLengthAdded value: +10 - added
Output schema / properties / input / properties / tasks / descriptionAdded value: +"Tasks to include in the estimate and calendar. [] returns zero hours and a calendar with no events." - added
Output schema / properties / input / properties / tasks / items / properties / day / descriptionAdded value: +"Weekday for weekly/biweekly tasks. Required but ignored for monthly tasks." - added
Output schema / properties / input / properties / tasks / items / properties / day / examplesAdded value: +[ + "MO" +] - added
Output schema / properties / input / properties / tasks / items / properties / frequency / descriptionAdded value: +"Repeat every week, every two weeks from the first matching weekday, or every month." - added
Output schema / properties / input / properties / tasks / items / properties / minutes / descriptionAdded value: +"Estimated minutes per run; used for event duration and monthly hours." - added
Output schema / properties / input / properties / tasks / items / properties / minutes / examplesAdded value: +[ + 35 +] - added
Output schema / properties / input / properties / tasks / items / properties / monthday / descriptionAdded value: +"Day of month for monthly tasks, limited to dates present in every month. Required but ignored for weekly/biweekly tasks." - added
Output schema / properties / input / properties / tasks / items / properties / monthday / examplesAdded value: +[ + 1 +] - added
Output schema / properties / input / properties / tasks / items / properties / owner / descriptionAdded value: +"Planning label: delegate to an operator, keep for yourself, or decide later. Included in the calendar note; does not assign or execute work." - added
Output schema / properties / input / properties / tasks / items / properties / time / descriptionAdded value: +"24-hour HH:mm start time, floating in the importing calendar’s local time zone." - added
Output schema / properties / input / properties / tasks / items / properties / time / examplesAdded value: +[ + "09:00" +] - added
Output schema / properties / input / properties / tasks / items / properties / time / maxLengthAdded value: +5 - added
Output schema / properties / input / properties / tasks / items / properties / time / minLengthAdded value: +5 - added
Output schema / properties / input / properties / tasks / items / properties / title / descriptionAdded value: +"Task label used as the calendar event summary." - added
Output schema / properties / input / properties / tasks / items / properties / title / examplesAdded value: +[ + "Investor update" +] - added
Output schema / properties / method / descriptionAdded value: +"Calculation or ranking method applied to the inputs." - added
Output schema / properties / monthlyHours / descriptionAdded value: +"Estimated monthly hours using 52/12 weekly, 26/12 biweekly and one monthly run." - added
Output schema / properties / provenance / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / provenance / descriptionAdded value: +"Dated data sources or runtime time-zone information used for this result." - added
Output schema / properties / schedules / descriptionAdded value: +"Normalized tasks with their first occurrence and recurrence rule, in input order." - added
Output schema / properties / schedules / items / properties / day / descriptionAdded value: +"Weekday for weekly/biweekly tasks. Required but ignored for monthly tasks." - added
Output schema / properties / schedules / items / properties / day / examplesAdded value: +[ + "MO" +] - added
Output schema / properties / schedules / items / properties / firstDate / descriptionAdded value: +"First occurrence on or after startDate." - added
Output schema / properties / schedules / items / properties / frequency / descriptionAdded value: +"Repeat every week, every two weeks from the first matching weekday, or every month." - added
Output schema / properties / schedules / items / properties / minutes / descriptionAdded value: +"Estimated minutes per run; used for event duration and monthly hours." - added
Output schema / properties / schedules / items / properties / minutes / examplesAdded value: +[ + 35 +] - added
Output schema / properties / schedules / items / properties / monthday / descriptionAdded value: +"Day of month for monthly tasks, limited to dates present in every month. Required but ignored for weekly/biweekly tasks." - added
Output schema / properties / schedules / items / properties / monthday / examplesAdded value: +[ + 1 +] - added
Output schema / properties / schedules / items / properties / owner / descriptionAdded value: +"Planning label: delegate to an operator, keep for yourself, or decide later. Included in the calendar note; does not assign or execute work." - added
Output schema / properties / schedules / items / properties / recurrenceRule / descriptionAdded value: +"RFC 5545 RRULE matching the task frequency and day." - added
Output schema / properties / schedules / items / properties / time / descriptionAdded value: +"24-hour HH:mm start time, floating in the importing calendar’s local time zone." - added
Output schema / properties / schedules / items / properties / time / examplesAdded value: +[ + "09:00" +] - added
Output schema / properties / schedules / items / properties / time / maxLengthAdded value: +5 - added
Output schema / properties / schedules / items / properties / time / minLengthAdded value: +5 - added
Output schema / properties / schedules / items / properties / title / descriptionAdded value: +"Task label used as the calendar event summary." - added
Output schema / properties / schedules / items / properties / title / examplesAdded value: +[ + "Investor update" +] - added
Output schema / properties / tool / descriptionAdded value: +"Calculator identifier for this result." - added
Output schema / properties / units / additionalProperties / descriptionAdded value: +"Unit or source detail for the named field." - added
Output schema / properties / units / descriptionAdded value: +"Units for the numeric and time fields in this result."
5 tool updates
v1.0.0- First observed
ai_api_cost - First observed
ai_subscription_stack_cost - First observed
cron_next_runs - First observed
meeting_time_zones - First observed
recurring_schedule
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose, and the descriptions explicitly cross-reference siblings (e.g., ai_api_cost vs. ai_subscription_stack_cost, meeting_time_zones vs. recurring_schedule vs. cron_next_runs). There is no meaningful overlap that would cause misselection.
All names use consistent snake_case noun phrases (ai_api_cost, meeting_time_zones, recurring_schedule, ai_subscription_stack_cost, cron_next_runs). No mixed conventions or vague verbs appear.
Five tools is well within the ideal 3–15 range, and each tool earns its place with a distinct capability. The set is neither bloated nor too thin for a utility server.
The surface covers AI cost estimation (API and subscriptions) and scheduling utilities (meeting overlap, recurring task plans, cron preview). Minor gaps exist, such as no holiday lookup or general time-zone conversion, but core workflows are complete and agents can work around these.
Maintenance
Related MCP Connectors
Deterministic time tools for AI agents: timezone conversion, business-day math, cron interpretation.
60+ units, live FX, timezones, and date arithmetic for AI agents.
Time and date math for AI agents: Unix timestamp conversion, DST-correct time zone conversion, durations, epoch arithmetic, cron schedules, and holiday countdowns. Eight tools, no key.
# TrueCalci Precision Compute Engine Deterministic statutory, financial, and engineering computational tools for AI agents, developers, and autonomous workflows over the Model Context Protocol (MCP). ### Capabilities (25 Verified Engines): - **Specialist FinOps:** Remote Contractor vs. W-2 Parity, S-Corp Reasonable Compensation (IRS Rev. Rul. 74-44), Solo 401(k) Shelter, Cross-Border FX Drag, Billable Capacity Floor. - **Global & Cross-Border Tax:** US Form 2555 FEIE Nomad Stacking, B2B Foreign
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to parse, validate, explain, and preview cron expressions, surfacing common silent bugs before deployment.421 npmMIT
- AlicenseNot gradedqualityDmaintenanceParse, validate, and explain cron expressions with pay-per-call via x402 (USDC on Base L2), returning next run times in any timezone.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables precise financial analysis of AI agent costs, including token pricing, multi-step run estimates, model comparison, and ROI versus human labor, with deterministic decimal math.-
- AlicenseNot gradedqualityAmaintenanceProvides exact, deterministic tools for math, dates, units, validation, and more to AI agents, returning precise answers with explicit assumptions and warnings instead of model guesses.MIT