MCP server for Epistemic Network Analysis via the webENA cloud service (app.epistemicnetwork.org)
ena-mcp demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive parameter schemas using Zod, and detailed descriptions. All 7 tools follow consistent patterns and include domain-specific context. However, output schemas are not formally documented in the tool definitions, they exist only in implementation code. Parameter descriptions are strong but some lack explicit constraints (e.g., minEdgeWeight range). Error handling is present but recovery guidance is minimal. The server is well-structured for its specialized domain (Epistemic Network Analysis) but lacks the polish of A-grade tools.
Verify the configured session cookie and list the projects it can reach. Run this first — every other tool fails the same way if the cookie is expired.
Render a subtraction network: mean(A) − mean(B) per edge, drawn in two colours. This is the standard way ENA studies show a between-group contrast. Edges are coloured by which group is stronger.
Fetch one project: its folders, uploaded data files, and the sets (models) inside it. Use this to find the setID that the model tools need.
Fetch a set without computing anything: which columns are codes, units, and conversation, plus the ENA algorithm parameters (stanza window, sphere norm, rotation, node positioning). Read this before changing parameters.
Render an SVG network plot: nodes at their optimized positions, edges weighted by mean connection strength across the supplied units. Optionally filter to a subset of units by name or pattern.
Output schemas not documented in tool definitions. Return types exist only in implementation (decodeModel, plotNetwork, plotSubtraction). LLMs cannot plan downstream operations without knowing what fields to expect.
Numeric parameters lack explicit bounds. minEdgeWeight, edgeScale, width, height have no min/max constraints in schema. LLMs may pass absurd values (negative widths, scale=1000) that break rendering.
Error messages lack recovery guidance. toolError() returns raw exception text without suggesting next steps. E.g., 'No computed model for set X' should suggest 'Run ena_run_model first.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Compute the ENA model server-side and return the full result: per-unit ENA scores (points), per-unit edge weights, node positions, variance explained, eigenvalues, rotation matrix, and goodness-of-fit correlations. Algorithm parameters can be overridden per run without saving anything back to the account. Note: overrides apply to algorithm settings only — changing which individual units or codes are *selected* requires the webENA UI.
Run the model repeatedly across a range of moving-window sizes and report how variance explained and goodness of fit change. Use this to justify a window choice rather than accepting the default. Each size is a full server-side model run, so keep the range small.
Parameter descriptions for plotting tools (xDim, yDim) reference 'first' and 'second' dimensions without explaining what those are. Domain context (PCA axes, variance explained) is missing.
No idempotency guarantees documented. ena_run_model and ena_sweep_window are read-only but cache results by setID. If called twice with different overrides, second call returns stale cached model from first call.