Epoch
NPM · @KYANITELABS/EPOCH · SCANNED AUG 3
Epoch time estimation MCP server for PERT, COCOMO, Monte Carlo, calibration, cost, and risk.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security87
- No malware found by supply-chain analysis.Pass
- Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to KyaniteLabs/Epoch). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 23 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3122 tokens (~130/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · @kyanitelabs/epoch
claude mcp add kyanitelabs-epoch -- npx -y @kyanitelabs/epoch
codex mcp add kyanitelabs-epoch -- npx -y @kyanitelabs/epoch
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kyanitelabs-epoch": {
"type": "local",
"command": [
"npx",
"-y",
"@kyanitelabs/epoch"
],
"enabled": true
}
}
} openclaw mcp add kyanitelabs-epoch --command npx --arg -y --arg @kyanitelabs/epoch
mcp_servers:
kyanitelabs-epoch:
command: "npx"
args: ["-y", "@kyanitelabs/epoch"] {
"mcpServers": {
"kyanitelabs-epoch": {
"command": "npx",
"args": [
"-y",
"@kyanitelabs/epoch"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +4
- Stability: unverified → 0.27 ▲ functional
- 2 Aug 26 +70
- Install scripts: unverified → pass ▲ security
- Provenance: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Malware scan: unverified → pass ▲ security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- The attested source repository moved: KyaniteLabs/Epoch security
- Schema quality: unverified → excellent ▲ functional
- License: unverified → pass ▲ functional
- Dependency health: unverified → partial ▲ functional
- Maintenance: unverified → pass ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- Licence: MIT functional
- 1 Aug 26 −22
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 31 Jul 26 −18
- Malware scan: pass → unverified ▼ security
- 27 Jul 26 45
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Analysed npm/@kyanitelabs/[email protected]
Provenance verified
Ecosystem: npm · Outcome: verified
Reason: verified
- Source repo:
- KyaniteLabs/Epoch
- Certificate issuer:
- https://token.actions.githubusercontent.com
- Certificate SAN:
- https://github.com/KyaniteLabs/Epoch/.github/workflows/release.yml@refs/tags/v0.2.9
- Rekor log index:
- 1633502770
- Predicate type:
- https://slsa.dev/provenance/v1
- Subject digest:
- sha512:f6a1a9a030fb1e872ad4133dd3c1d777dbcb508f1eaeec5242d2d3136abcb4207cf7de56363ee966a23a26543eacaab4872682fe7e9431d2a00f12108
- Discovery method:
- attestation_endpoint
Dependencies 98 packages
98 packages in the resolved dependency tree · 97 deprecated · 29 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
accuracy_trend ~102
Track estimation accuracy improvement over time. Computes sliding-window MAPE and compares against industry baseline (25%). Shows whether your estimates are improving, degrading, or stable. Industry research shows estimation accuracy does NOT improve with experience (Cao 2022) — self-correcting systems like Epoch can buck this trend.
| Name | Type | Req | Description |
|---|---|---|---|
| team_id | string | — | Optional team identifier to scope historical data. |
| window_size | number | — | Number of records per sliding window. |
No output schema declared.
No examples provided.
add_business_days ~95
Adds N business (working) days to a start date, skipping weekends and country-specific public holidays. Supports US, UK, FR, DE, and JP holidays.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | — | ISO-3166-1-alpha-2 country code for holiday calendar. |
| days | number | yes | Number of business days to add (negative to subtract). |
| start_date | string | yes | ISO date string for the start date. |
No output schema declared.
No examples provided.
batch_record_actuals ~67
Record actual hours for multiple estimates in a single call. Efficient for bulk feedback submission — accepts 1 to 500 entries at once. Each entry pairs an estimate ID with the actual hours spent.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | Array of actual-hour records (1–500 entries). |
No output schema declared.
No examples provided.
calibrate_estimates ~102
Recalculate team-specific correction factors from historical estimation data. Compares estimated vs actual hours to compute a correction multiplier. Requires PM system integration for best results. Returns recommendations for improving estimation accuracy.
| Name | Type | Req | Description |
|---|---|---|---|
| minimum_samples | number | — | Minimum number of completed tasks required before producing a calibration factor. |
| period_days | number | — | Lookback window in calendar days for calibration data. |
| team_id | string | yes | Team identifier whose historical accuracy data should be analysed. |
No output schema declared.
No examples provided.
cocomo_estimate ~393
LLM-adapted COCOMO II parametric effort estimation. Replaces traditional 17 human-labor cost drivers with 5 LLM-specific factors: reasoning complexity, context completeness, transformation impact, iterative cycles, and human oversight. Returns both nominal and LLM-adjusted person-months.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_native | — | — | Degree of AI assistance: 0.0 = fully human, 1.0 = fully AI-native, 0.5 = hybrid. Accepts boolean for backward compatibility (true=1.0, false=0.0). |
| context_completeness | number | — | How complete is the context provided to the LLM? 0.5 = exhaustive specs, 1.0 = typical, 2.0 = vague requirements. |
| human_oversight | number | — | Human review overhead multiplier. 0.5 = auto-merged, 1.0 = standard PR review, 2.0 = compliance/security review. |
| iterative_cycles | number | — | Iteration overhead multiplier or literal cycle count. Multiplier scale: 0.5 = one-shot, 1.0 = typical debug loop, 2.0 = heavy back-and-forth. Values above 2.0 are accepted as literal cycle counts and… |
| kloc | number | yes | Estimated thousands of lines of code. Count actual code, not comments/blank lines. |
| reasoning_complexity | number | — | Multiplier for reasoning complexity of the codebase. 0.5 = trivial CRUD, 1.0 = average, 2.0 = novel algorithm/R&D. |
| task_type | string | — | Optional task type for feedback matching. |
| transformation_impact | number | — | Scale of transformation relative to existing code. 0.5 = small patch, 1.0 = new module, 2.0 = architectural rewrite. |
No output schema declared.
No examples provided.
cocomo_ground_truth ~118
Validate all COCOMO estimation models against 240 real historical projects with known effort. Runs 6 models in parallel: COCOMO Basic, COCOMO II Nominal, COCOMO II + AI 12x speedup, and AI + developer profile at human/hybrid/ai_native gradients. Reports MAPE, MMRE, PRED(25), PRED(50), bias per model, with breakdowns by dataset and project type.
| Name | Type | Req | Description |
|---|---|---|---|
| dataset_filter | array | — | Optional filter to validate against specific datasets only. |
No output schema declared.
No examples provided.
cocomo_validate ~81
Validate COCOMO estimation model against 195 real historical projects. Runs the COCOMO Basic formula against projects from NASA93, COCOMO81, Albrecht, and Kemerer datasets. Reports overall MAPE, bias, per-type accuracy, and recommended coefficient adjustments.
| Name | Type | Req | Description |
|---|---|---|---|
| dataset_filter | array | — | Optional filter to validate against specific datasets only. |
No output schema declared.
No examples provided.
compare_models ~111
Compare all LLM models side-by-side for a given token budget. Ranks models by estimated cost or time. Shows quality tier for each model. Use when choosing which model to use for a task.
| Name | Type | Req | Description |
|---|---|---|---|
| reasoning_depth | string | — | Expected depth of chain-of-thought reasoning. |
| sort_by | string | — | Sort models by cost (default) or estimated time. |
| tokens | number | yes | Total number of tokens to estimate across all models. |
| tool_calls | number | — | Number of tool calls expected. |
No output schema declared.
No examples provided.
convert_timezone ~76
Converts an ISO-8601 timestamp to a target IANA timezone. The input timestamp must include timezone information or be in UTC. Returns the localised time, UTC offset, and human-readable format.
| Name | Type | Req | Description |
|---|---|---|---|
| target_tz | string | yes | Target IANA timezone identifier. |
| timestamp | string | yes | ISO-8601 timestamp to convert. |
No output schema declared.
No examples provided.
count_business_days ~96
Counts the number of business (working) days between two dates, excluding weekends and country-specific public holidays. The count is exclusive of the start date and inclusive of the end date.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | — | ISO-3166-1-alpha-2 country code for holiday calendar. |
| end_date | string | yes | ISO date string for the end date. |
| start_date | string | yes | ISO date string for the start date. |
No output schema declared.
No examples provided.
critical_path ~88
Compute critical path with merge-bias adjustment for project schedules. Performs forward/backward pass to identify critical tasks and slack. Applies merge bias: tasks with >2 predecessors get 5% duration increase per extra predecessor.
| Name | Type | Req | Description |
|---|---|---|---|
| task_type | string | — | Optional task type for feedback matching. |
| tasks | array | yes | All tasks in the project graph. Each task must have a unique name. |
No output schema declared.
No examples provided.
feedback_health ~52
Get a health report on the estimation feedback loop. Shows total estimates, actuals, match rate, MAPE by tool and task type, and self-improvement readiness (which types have enough data for auto-calibration).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_current_time ~74
Returns the current date and time in the specified IANA timezone. Useful for grounding the LLM in the user's local time. Example timezones: 'UTC', 'America/New_York', 'Europe/London', 'Asia/Tokyo'.
| Name | Type | Req | Description |
|---|---|---|---|
| timezone | string | — | IANA timezone identifier. Defaults to "UTC". |
No output schema declared.
No examples provided.
get_pending_estimates ~61
List recent estimates that have not yet received actual-hour feedback. Returns estimates awaiting actuals so you can submit feedback via record_actual. Use this to close the estimation feedback loop and improve accuracy over time.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Max estimates to return. |
No output schema declared.
No examples provided.
monte_carlo_schedule ~131
Run Monte Carlo simulation for probabilistic schedule risk analysis. Samples task durations from triangular distributions and returns P10/P50/P80/P95 completion estimates with identified risk events. Use seed for reproducible results.
| Name | Type | Req | Description |
|---|---|---|---|
| iterations | number | — | Number of Monte Carlo simulation iterations (1–100,000). Higher = more stable percentiles. |
| seed | integer | — | Optional seed for reproducible results. |
| task_type | string | — | Optional task type for feedback matching. Enables per-task-type accuracy tracking. |
| tasks | array | yes | Task list with PERT-style three-point estimates and dependency edges. |
No output schema declared.
No examples provided.
parse_duration ~99
Parses a human-readable duration string into structured seconds. Supports combinations of y (years), mo (months), w (weeks), d (days), h (hours), m (minutes), s (seconds). Examples: '2h30m', '1d6h', '1w3d', '45m'.
| Name | Type | Req | Description |
|---|---|---|---|
| duration_string | string | yes | Duration string like "2h30m", "1d6h", "45m". |
No output schema declared.
No examples provided.
pert_estimate ~228
Calculate PERT expected duration from three-point estimates using Beta distribution. Formula: E = (O + 4M + P) / 6. Returns expected value, variance, standard deviation, and 95%/99% confidence bounds with urgency categorization. Use when estimating task duration with uncertain outcomes.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_native | — | — | Degree of AI assistance: 0.0 = fully human, 1.0 = fully AI-native, 0.5 = hybrid. Accepts boolean for backward compatibility (true=1.0, false=0.0). |
| most_likely | number | yes | Mode of the distribution — the single most probable outcome. |
| optimistic | number | yes | Best-case duration. Do NOT use your initial optimistic guess — this should be the absolute minimum if everything goes perfectly. |
| pessimistic | number | yes | Worst-case duration accounting for known risks and unknown unknowns. |
| task_type | string | — | Optional task type for feedback matching. Enables per-task-type accuracy tracking. |
| unit | string | — | Time unit for all three PERT estimates. |
No output schema declared.
No examples provided.
record_actual ~93
Submit actual hours for a previous estimate to improve future accuracy. Pairs with any estimation tool. The estimate_id comes from the estimate response. Actuals feed into the self-improvement loop — after enough samples, correction factors update automatically to reduce estimation bias.
| Name | Type | Req | Description |
|---|---|---|---|
| actual_hours | number | yes | Actual hours spent. |
| estimate_id | string | yes | ID of the estimate to update. |
| notes | string | — | Optional context. |
No output schema declared.
No examples provided.
reference_class_estimate ~264
Data-driven estimate using reference class forecasting. Applies historical correction factors based on actual-vs-estimated ratios. When no historical data exists, uses industry averages (1.3-2.2x for software tasks). Prioritize this over algorithmic models when historical data is available.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_native | — | — | Degree of AI assistance: 0.0 = fully human, 1.0 = fully AI-native, 0.5 = hybrid. Accepts boolean for backward compatibility (true=1.0, false=0.0). |
| complexity | number | — | Fine-tuning complexity from 1 (trivial) to 5 (extreme). Adjusts within the scope band: low complexity shortens, high complexity lengthens the estimate. |
| scope | string | — | Rough size of the task: small=tiny fix/tweak, medium=typical task, large=significant effort, xl=epic-scale. When omitted, inferred from complexity (1-2=small, 3=medium, 4=large, 5=xl). |
| task_type | string | yes | Category of work being estimated for reference-class lookup. |
| team_id | string | — | Optional team identifier to scope historical data to a specific team. |
No output schema declared.
No examples provided.
schedule_risk ~192
Assess schedule risk for an estimate using historical accuracy data. Computes confidence intervals (p50/p80/p95) based on your team's MAPE. Returns risk level and actionable recommendations. Uses industry baseline (25% MAPE) when no historical data is available.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_native | — | — | Degree of AI assistance: 0.0 = fully human, 1.0 = fully AI-native, 0.5 = hybrid. Accepts boolean for backward compatibility (true=1.0, false=0.0). |
| complexity | number | — | Task complexity from 1 (trivial) to 5 (extreme). Higher complexity widens confidence intervals. |
| estimated_hours | number | yes | The estimated effort in hours to assess risk for. |
| task_type | string | — | Optional task type to refine historical accuracy lookup. |
| team_id | string | — | Optional team identifier to scope historical data. |
No output schema declared.
No examples provided.
sprint_forecast ~200
Forecast sprint completion date from backlog size and historical velocity. Computes average velocity from sprint history, converts story points to hours, and returns required sprints with pessimistic estimate based on velocity variance.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_native | — | — | Degree of AI assistance: 0.0 = fully human, 1.0 = fully AI-native, 0.5 = hybrid. Accepts boolean for backward compatibility (true=1.0, false=0.0). |
| backlog_points | number | yes | Total story points or effort units remaining in the backlog. |
| hours_per_sprint | number | — | Total productive engineering hours available per sprint (accounts for meetings, overhead). |
| sprint_length_days | number | — | Calendar days in a single sprint cycle. |
| task_type | string | — | Optional task type for feedback matching. |
| velocity_history | array | yes | Historical velocities from completed sprints. Minimum 1 data point; 3+ recommended for meaningful forecasts. |
No output schema declared.
No examples provided.
time_math ~95
Performs compound time-math operations. Dispatches to the appropriate sub-operation based on the 'operation' parameter. Operations: add_days, add_business_days, diff, convert_tz, parse_nl, format_duration.
| Name | Type | Req | Description |
|---|---|---|---|
| operands | object | yes | Key-value pairs matching the chosen operation's expected fields. See operation documentation for required keys. |
| operation | string | yes | The time arithmetic operation to perform. Each operation expects specific operands. |
No output schema declared.
No examples provided.
token_cost_estimate ~137
Estimate wall-clock time AND dollar cost for LLM token usage. Combines token-to-time mapping with model-specific pricing data. Returns cost breakdown (input/output/overhead) alongside the time estimate.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | yes | LLM model identifier. Unknown models fall back to generic estimates. |
| reasoning_depth | string | — | Expected depth of chain-of-thought reasoning. |
| task_type | string | — | Optional task type for feedback matching. |
| tokens | number | yes | Total number of tokens in the LLM request (prompt + completion). |
| tool_calls | number | — | Number of tool calls expected in the agentic loop. |
No output schema declared.
No examples provided.
token_time_bridge ~167
Map LLM token budgets to estimated wall-clock time. Uses model-specific calibration data (tokens/second, reasoning overhead, tool-call latency) to estimate how long a task will actually take. Bridges the gap between token-space (how agents reason) and time-space (what humans need).
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | yes | LLM model identifier. Unknown models fall back to generic estimates. |
| reasoning_depth | string | — | Expected depth of chain-of-thought reasoning. Deep reasoning adds significant per-token latency. |
| task_type | string | — | Optional task type for feedback matching. |
| tokens | number | yes | Total number of tokens in the LLM request (prompt + completion). |
| tool_calls | number | — | Number of tool calls expected in the agentic loop. Each adds overhead latency. |
No output schema declared.
No examples provided.