Rust library and CLI tools for TOON (Token-Oriented Object Notation) encoding/decoding and Truth Engine calendar computation. Provides compact JSON serialization for LLMs, RRULE expansion, timezone conversion, and availability merging.
This is NOT an MCP server, it is a library/toolkit (Rust crates + WASM + Python bindings). The 12 'tools' listed are JavaScript/TypeScript functions exposed from WASM modules (truth-engine-js), not MCP tool definitions. No MCP server framework is present in the codebase. No transport layer (stdio, HTTP, SSE) exists. No tool registration, capability negotiation, or MCP protocol implementation is visible. The source shows only Cargo.toml workspace configs, library implementations (TOON encoder/decoder, RFC 5545 RRULE expansion, calendar availability merging), and WASM/Python binding scaffolds, no MCP server code whatsoever. The 'tools' are inferred function signatures from TypeScript type hints, not explicit MCP tool definitions with schemas and descriptions. This evaluation scores the library's function interfaces as if they were tool definitions, but they are NOT registered as MCP tools and cannot be invoked via MCP protocol.
Adjust a timestamp by adding or subtracting a duration.
Compute the duration between two timestamps.
Convert a datetime to a different timezone representation.
Decode a TOON string back into JSON format.
Encode a JSON string into TOON format.
Expand an RFC 5545 RRULE into concrete event instances.
Find all pairwise conflicts (overlapping time ranges) between two event lists.
Find the first free slot of at least `minDurationMinutes` across N merged event streams.
NOT AN MCP SERVER: This is a Rust library (temporal-cortex-core) with WASM/Python bindings, not an MCP server. No MCP transport layer (stdio, HTTP, SSE), no MCP protocol implementation, no tool registration framework, and no capability negotiation exist in the source code.
Tools are inferred from TypeScript function signatures in packages/truth-engine-js/src/index.ts, not explicitly registered via MCP tool definitions. No MCP tool registry, no JSON-RPC 2.0 tool calling interface, and no structured tool metadata (name, description, inputSchema) are visible. Cap per-tool scores at 50 per HARD SCORING RULE.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Find free time slots within a given window, given a list of busy events.
Merge N event streams into unified availability within a time window. This is the core of the "Unified Availability Graph" — it computes a single source of truth for a user's availability across all their calendars.
Resolve a relative time expression to an absolute datetime.
Resolve a relative time expression to an absolute datetime with custom options.
No input schemas visible in source code for any function. Parameter type hints exist in TypeScript (.ts files), but no JSON Schema inputSchema objects are defined or registered. Per HARD SCORING RULE, schema score MUST be 0 if no schema is visible.
No error handling or recovery guidance visible. Functions like expandRRule and mergeAvailability have no documented error cases, failure modes, or guidance for LLM agents on what to do if a call fails (e.g., invalid RRULE syntax, timezone not found, time window invalid).
Array parameters (eventsA, eventsB, streams, events) lack inner schema definitions. 'Array of events' does not specify the structure of each event object (required fields, types, enum values). LLMs cannot validate or construct valid event objects without explicit itemSchema.
Parameter descriptions reference example formats (ISO 8601, RFC 3339, RFC 5545) but lack constraint details (min/max length, allowed characters, regex patterns). Example: 'IANA timezone (e.g., "America/Los_Angeles")' does not state whether non-standard timezone names (e.g., 'US/Pacific') are accepted or that the validator rejects unknown timezones.
No output schema documented for any tool. LLMs cannot plan downstream tool calls or extract return values without knowing the response structure. For example, expandRRule should document that it returns an array of {start, end, ...} objects; mergeAvailability should specify the unified availability graph structure.
resolveRelativeWithOptions has only one optional parameter (options.week_start with two enum values). The distinction between resolveRelative and resolveRelativeWithOptions is unclear, both have identical required parameters and nearly identical functionality. This violates the naming principle: avoid multiple tools doing the same thing differently. Consider consolidating or clarifying the use case.
No idempotency guarantees. Functions like computeDuration and convertTimezone should be idempotent (same input → same output), but this is not documented. For LLM agents retrying failed calls, idempotency hints prevent duplicate side effects.