Atlas / MCP servers / kyanitelabs / Epoch

EpochBLOCK

mcp/kyanitelabs/epoch

Time estimation MCP server for AI agents: PERT, COCOMO II, Monte Carlo, sprint forecasting, token-to-time mapping, cost estimation, and schedule risk tools.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
3 3r · 0w · 0d
Transport
stdio
License
Apache-2.0
Stars
7
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Epoch is a time estimation MCP server that helps engineering leads, agents, and planners who need calibrated duration estimates produce PERT/reference-class estimates and record actuals.

TL;DR: Epoch — time estimation MCP server. Best for engineering leads, agents, and planners who need calibrated duration estimates.

[](https://github.com/KyaniteLabs/Epoch/actions/workflows/ci.yml) [](https://github.com/KyaniteLabs/Epoch/blob/main/LICENSE) [](https://modelcontextprotocol.io) [](https://www.npmjs.com/package/@kyanitelabs/epoch) [](https://registry.modelcontextprotocol.io/v0/servers/io.github.KyaniteLabs%2FEpoch/versions/latest)

Epoch helps AI agents understand time.

AI can write code, analyze data, and build apps -- but it can't tell you how long something will take, what it'll cost, or whether a deadline is realistic. Epoch fixes that.

Show Me

You: "How long will a 15,000 line project take with a small team?"

Claude (using Epoch):
COCOMO II nominal: 100 person-months (traditional team)
AI-adjusted: 9 person-months (LLM-assisted workflow)
Schedule risk: medium (MAPE 15%, based on 28 historical features)
Cost estimate (Claude Sonnet): ~$340 in API tokens
You: "How many working days between now and launch?"

Claude (using Epoch):
Start: May 1, 2026
End: July 15, 2026
Business days: 54
Weekend days: 16
Holidays: 1 (Independence Day)
Total calendar days: 75
Read from source at commit 89dbbfd887c2OBSERVED · 2026-10-10
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add epoch -- npx -y @kyanitelabs/[email protected]
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
get_current_timereadGet current time in a timezone
pert_estimatereadPERT three-point estimation
reference_class_estimatereadReference class estimation with correction factors
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (10 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (22)

HIGHObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
data/eval-corpus/raw/vuejs__core/issues.jsonl:106
{"schema_version":1,"collector_version":2,"collected_at":"2026-09-25T16:18:37.497Z","issue":{"repo":"vuejs/core","number":14382,"state":"closed","title":"[Vapor] :style={...} attributes on SVG element
MEDIUMInventory / provenance · inv.binary · CWE-1104
Research/llm_time.agent.final.base.docx
llm_time.agent.final.base.docx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
Research/llm_time.agent.final.footnote.docx
llm_time.agent.final.footnote.docx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/data-gather.mjs:661
console.log(`    Token calibrations:    ${Object.keys(db.tokenTimeCalibration).length}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/dogfood-seed-2.sh:5
API="http://127.0.0.1:3000/v1/tools"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/dogfood-seed.sh:5
API="http://127.0.0.1:3000/v1/tools"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.fl4write.yaml
.fl4write.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/dispatcher/tool-surface-sync.test.ts:151
const docsLlms = readRepoFile("../../docs/llms.txt");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/dispatcher/tool-surface-sync.test.ts:152
const rootLlms = readRepoFile("../../llms.txt");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/entries/mcp-stdio-guard.integration.test.ts:25
const REPO_ROOT = fileURLToPath(new URL("../../", import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/lib/internal/error-helpers.ts:7
import type { ToolError } from "../../types/index.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/lib/internal/time-math-dispatch.ts:7
import type { ToolResult } from "../../types/index.js";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/ops/epoch-fleet-audit.md:77
curl -fsS http://127.0.0.1:8420 >/dev/null && echo "Factory dashboard local OK" || echo "Factory dashboard local not reachable"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/ops/epoch-receiver-watchdog.md:14
https://${EPOCH_RECEIVER_TAILNET_HOST}:3099 -> http://127.0.0.1:3099
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/ops/epoch-receiver-watchdog.md:53
curl -fsS http://127.0.0.1:3099/health
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
src/lib/jsonrpc-stdio-guard.test.ts:192
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}',
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@hono/node-server, @modelcontextprotocol/sdk, commander, date-fns, date-fns-tz, hono, zod, @eslint/js
Why it matters. 16 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
workers/telemetry-receiver/package.json
@cloudflare/workers-types, typescript, vitest, wrangler
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
Research/llm_time.agent.final.converted.md:817
Layer 2 extends Layer 1 with calendar-aware calculations that are absent from existing time MCP servers: business-day arithmetic, holiday detection, and working-hours validation. ^73^The `workalendar`
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
Research/research/llm_time_dim08.md:110
Excerpt: "When stateless_http=True: No SSE connections, No session IDs, No sampling, No progress, No subscriptions, Plain HTTP POST -> JSON Response... Horizontal scaling works perfectly (any server i
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOInventory / provenance · inv.oversize · CWE-1104
data/eval-corpus/corpus-20260925.jsonl
data/eval-corpus/corpus-20260925.jsonl
Why it matters. 1506211 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 89dbbfd887c2full audit observations/trust-audit/mcp-server/kyanitelabs__epoch.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1089dbbfd887c2BLOCKD69first audit
06

Questions

What is the Epoch MCP server?

Time estimation MCP server for AI agents: PERT, COCOMO II, Monte Carlo, sprint forecasting, token-to-time mapping, cost estimation, and schedule risk tools.

What tools does Epoch expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Epoch safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does Epoch need?

It reads GLM_AUTH_TOKEN and MINIMAX_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Epoch run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as epoch-telemetry-receiver at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (89dbbfd887c2), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement