A Model Context Protocol server with enhanced Titan Memory implementation for machine learning model training and inference using TensorFlow.js
This server has significant definition quality gaps. While 7 tools are explicitly registered with names and input schemas, descriptions are present but minimal (10-20 chars), lacking the context needed for LLM tool selection. Parameter descriptions are generic and insufficient. No output schemas are documented. The server is STDIO-only (capped at 50 per protocol readiness), and the definitions themselves score lower due to missing depth and guidance. Tool names follow a reasonable verb_noun pattern (init_model, train_step, forward_pass, save_model, load_model, get_status, train_sequence), but descriptions do not explain when to use each tool, what prerequisites exist, or what the outputs contain.
Run a forward pass through the model with an input vector.
Get current model status and configuration.
Initialize the Titan Memory model with optional configuration.
Load the model from a specified path.
Save the model to a specified path.
Train the model on a sequence of vectors.
Perform a single training step with current and next state vectors.
Descriptions are too brief (10 - 20 characters) and lack LLM-actionable context. 'Initialize the Titan Memory model with optional configuration' (54 chars) is borderline acceptable, but others like 'Save the model to a specified path' (35 chars) and 'Load the model from a specified path' (36 chars) lack guidance on when to use them, what happens on error, or how outputs chain to other tools.
No output schemas are documented. The server code shows tools return JSON (e.g., cost, predicted, surprise for train_step; predicted, memory, surprise for forward_pass), but these return types are not declared in the tool definition. LLMs cannot plan downstream calls or extract the right data without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Parameter descriptions are generic or missing. E.g., 'inputDim' in init_model says 'Input dimension (default: 64)' but does not explain what it controls, the valid range, or how it affects downstream operations. 'path' in save_model and load_model just says 'Path to save/load the model' but does not clarify file format, absolute vs relative, or required directory existence.
No error handling guidance. The server code shows error responses (e.g., 'Model not initialized', 'Missing x_t / x_next') but these are not documented in tool descriptions. LLMs do not know which errors are retryable, which require user intervention, or what to do next.
No parameter constraints or validation hints. Arrays like x_t, x_next, and sequence lack dimension specs. Are they 1D vectors of any length? Must they match inputDim? The description 'Current state vector' is vague. Adding 'Array of floats, length = inputDim' would enable validation and guide LLM calls.
No tool prerequisites or ordering guidance. E.g., init_model must be called before train_step, but this is not stated. An LLM might try to call train_step without initializing, hit 'Model not initialized', and not know to call init_model first. Descriptions should say 'Call init_model first' or 'Requires a model initialized via init_model()'.
No state management clarity. The server maintains a hidden memoryVec that is updated by forward_pass and train_step. This internal state is never declared in tool definitions, so an LLM cannot reason about side effects or predict behavior across calls.