interlens
What it does: A stdio MCP server (v2.2.4, plugin.json) exposing 21 eager-registered tools over a static graph of 288 FLUX cognitive lenses (thinking patterns from the FLUX Review). Confirmed against packages/mcp/index.js + api-client.js: real, well-built capabilities are the lens graph itself — keyword/semantic search, related/journey/bridge/contrast/triad/neighborhood traversal, centrality (betweenness/pagerank/eigenvector), gap detection across 28 thematic frames, and 232 curated dialectic contrast pairs (CHANGELOG 2.1.0). Data is served from a hosted Flask API (interlens-api-production.up.railway.app) with 1h file cache; also ships a React web explorer (interlens.com) and Python API. A ‘Phase 0 enhanced thinking’ layer (lib/belief-statements.js, quality-evaluation.js, synthesis.js, thinking-modes.js, refinement.js) bolts on belief-statement generation, 4-criteria quality scoring, solution synthesis, and an iterative refine loop.
Rationale: The core lens-graph product is genuinely valuable, unique in the ecosystem, and worth keeping. But two grounded-in-code problems hold it back. (1) The ‘Phase 0 enhanced thinking’ modules are keyword heuristics masquerading as reasoning: belief-statements.js is a switch(lensName) over exactly 7 hardcoded lenses with regex signal extraction (/tried|attempted/, /diminishing|plateau/) and a generic fallback (‘Applying X lens may reveal non-obvious aspects’); quality-evaluation.js scores specificity/novelty/actionability via regex counting with hand-tuned magic constants; and refine_lens_application ‘iteratively improves until quality threshold’ by optimizing toward that regex scorer (i.e. keyword density), not real insight quality. This is precisely the failure mode the 2026 verification literature (ReVeal; ‘From Code to Courtroom’) warns about — generic unstructured critique that does not improve output — made worse here because no LLM is involved. (2) The server eager-registers 21 tool schemas (~370 lines in index.js ListTools), which runs against the dominant 2026 progressive-disclosure pattern. The fix is structural, not a rewrite: keep the lens graph, gut or restructure the belief/quality/refine heuristics into a deterministic-skeleton + LLM-island shape (interlens supplies the lens frame + framing questions + structure validation; the calling agent fills the beliefs), and slim the tool surface.
SOTA gap: Two frontier ideas it lacks: (a) Progressive tool disclosure / RAG-MCP — it eager-loads 21 tool schemas instead of exposing a thin surface (one search/get tool) with deferred detail, the 2026 table-stakes pattern (Tool Search Tool ~85% token cut, RAG-MCP). (b) Deterministic-skeleton + LLM-island / structured-generation — its belief/quality/refine layer reinvents reasoning as brittle regex heuristics; the modern shape is for interlens to be the deterministic skeleton (lens definition, framing questions, schema/structure enforcement) and let the calling agent be the LLM island that produces the actual beliefs, rather than a no-LLM scorer the agent optimizes against.
Redundancy: Low. intermonk (Hegelian dialectic / Electric Monk subagents) is a conceptual neighbor to interlens’s get_dialectic_triads / find_contrasting_lenses, but intermonk is a reasoning agent while interlens is a queryable lens corpus — complementary, not overlapping. interseed (idea garden) and internext (prioritization) touch ‘structured thinking’ adjacently but share no mechanism. The 288-lens FLUX graph is unique in the roster. The hosted-API + web-explorer + npm-MCP triple does duplicate generic publishing concerns interpub handles, but that is packaging, not capability overlap.
Actions:
- Restructure the Phase 0 belief/quality/refine layer: remove the no-LLM regex scorer that refine_lens_application optimizes against (it rewards keyword density, not insight), and reshape these tools as deterministic-skeleton + LLM-island — interlens returns the lens frame, framing questions, and a structure schema; the calling agent generates the beliefs. Cite SOTA: deterministic-skeleton/structured-generation + the ‘generic critique is ineffective’ finding (ReVeal, From Code to Courtroom).
- Adopt progressive tool disclosure: collapse the 21 eager-registered tools toward a thin core surface (search_lenses, get_lens, plus a single graph-traversal entry point) and defer the long tail, or expose a code-mode-style API, to stop loading ~370 lines of schemas up front. Cite SOTA: Tool Search Tool / RAG-MCP / progressive disclosure.
- Reduce the hard single-point dependency on the hosted Railway Flask API: the 288-lens corpus is small static data — ship it (or a snapshot) in the MCP bundle with the API as an optional enrichment/fallback, removing the availability and supply-chain risk of a remote endpoint baked into api-client.js.
- Expand or delete the 7-lens hardcoded belief templates: generating real per-lens beliefs for only 7 of 288 lenses (with a hollow generic fallback for the other 281) is misleading — either drop the template path entirely in favor of the LLM-island approach or document the limitation explicitly.