A 3D full-body anatomy + biomechanical-relationship engine exposed as an MCP server (22 tools) with an inline 3D viewer. Educational & directional, not diagnostic.
Anatomy Engine demonstrates solid tool design with 22 well-named, read-only tools covering a coherent domain. All tools have clear descriptions (avg ~120 chars) and explicit input schemas with typed parameters. Naming follows verb_noun convention consistently (list_, get_, search_, describe_, analyze_, focus_, show_). However, output schemas are not formally documented in the source, responses are inferred from implementation. Parameter descriptions are present but sometimes generic (e.g., 'Structure id, e.g. gluteus_maximus' repeated across 8+ tools). No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Error handling is basic, ToolError class exists but recovery guidance is minimal. Clinical disclaimer and red-flag warnings show domain awareness but are not integrated into tool responses.
Global muscle activation for a multi-joint task by phase (gait, squat, hip_hinge, overhead_press). Returns prime movers / synergists / stabilizers.
Describe a joint movement: range of motion, which muscles contract vs. stretch, and the downstream postural effect.
Structures in a body area (optionally one side), for isolating/highlighting a specific spot — e.g. focus_region('thorax','left') for a left mid-trap issue. Returns the structures + a viewer URL focused there.
Arterial supply and venous/lymphatic drainage of a structure. Anatomical reference.
Everything connected to a structure — grouped by how it connects (regional, synergist, antagonist, kinetic_chain, fascial, attachment) plus a flat list. E.g. get_connections('gluteus_maximus') returns the whole hip/posterior-chain group and explains why a weak psoas affects the glutes.
Contraindications for a pathology: which interventions are unsafe or inadvisable. Always check before recommending a corrective.
Output schemas not formally documented. Tool implementations return structured objects (e.g., getStructure returns {id, english, latin, system, region, description, relationshipCount, patterns}), but response schemas are not declared in tool definitions. LLMs cannot plan downstream calls without knowing what fields to expect.
Parameter descriptions are repetitive and generic. 8+ tools use identical phrasing 'Structure id, e.g. gluteus_maximus' without explaining when to use each tool or how they differ. Descriptions should clarify intent: 'Get biomechanical relationships (antagonist/synergist/coupled) for a structure' vs 'Get all connected structures grouped by connection type (regional, synergist, kinetic_chain, fascial, attachment)'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2025-06-18+ | v2 |
Myofascial chains (Anatomy-Trains meridians). Pass a structure id to see which chains it's in, or a chain name (e.g. 'deep_front_line') to list its members — for tracing tension up/down a line.
Nerve supply of a structure: nerve, spinal roots (myotome), and plexus. Anatomical reference.
Corrective options for a structure by goal (release, stretch, strengthen, mobilize). Educational, not prescriptive.
For a movement action (e.g. 'hip extension', 'scapulothoracic protraction'), classify a structure's role and list agonists / antagonists / synergists / stabilizers.
Get one pattern: tight/weak structures, region, summary, and corrective ideas.
Get a named posture (e.g. 'anterior_pelvic_tilt') as joint-angle targets plus its associated tight/weak muscle-balance read.
Referred pain map: where pain from a structure typically radiates. Educational reference for symptom orientation.
Get the biomechanical relationships touching a structure (antagonist/synergist/coupled) with functional notes and corrective ideas.
Get one structure: English/Latin names, system, side, region, description, and which patterns it participates in.
List named pathologies (conditions, injuries, syndromes) the engine knows about. Educational reference.
List the named postural muscle-balance patterns (crossed syndromes, pronation distortion, etc.).
List anatomical structures, optionally filtered to one system.
List the anatomical systems the engine can load (skeletal, muscular, …), in load-priority order.
Symptom → possible structures map. Pass a symptom (e.g. 'knee pain', 'shoulder clicking') to see which structures commonly cause it. Educational orientation only — not a diagnosis.
Fuzzy natural-language search → structure ids. Use this to resolve a plain-language name (e.g. 'glute', 'hip flexor', 'mid trap') to the exact internal id before calling other tools.
Render the inline 3D viewer for a selection of systems, a pose, and an optional region. Returns the resolved selection and a viewer resource (ui://anatomy/viewer).
No tool annotations despite all 22 tools being read-only and idempotent. MCP spec supports readOnlyHint and idempotentHint to signal safety to agents. Adding these would enable agents to call tools more aggressively without fear of side effects.
Error handling lacks recovery guidance. ToolError class throws generic messages like 'Unknown structure "id". Try list_structures to see valid ids.' but does not integrate clinical disclaimers or red-flag warnings into responses. Symptom-facing tools (map_symptoms, get_referred_pain) should include RED_FLAG_NOTE in error and success responses.
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients. HTTP transport (via service/http.ts) exists but is not the primary interface. This caps protocol readiness at 50.