{"name":"io.github.neurarch-ai/neurarch-mcp","slug":"neurarch-ai-neurarch-mcp","title":null,"description":"Reads a PyTorch .py, a Neurarch graph, or a HF repo; agents inspect, lint, verify and rank designs.","url":"https://mcp.market/server/neurarch-ai-neurarch-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"seo","tags":["seo"],"presence":{"score":28,"stars":1,"forks":1,"downloads_week":86,"last_push_at":"2026-09-19T07:37:49.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/neurarch-ai/neurarch-mcp","website":null,"version":"0.14.0","remotes":[],"packages":[{"registryType":"npm","identifier":"neurarch-mcp","version":"0.14.0","transport":{"type":"stdio"},"packageArguments":[{"description":"Path to a PyTorch .py file or .neurarch.json graph, or zoo:<id> for a bundled reference architecture (examples/ in the repo)","isRequired":true,"type":"positional","valueHint":"model_path"},{"description":"Reload the model file when the Neurarch app saves it","type":"named","name":"--watch"},{"description":"Expose the six mutation tools (off by default)","type":"named","name":"--write"},{"description":"Allow hf:<org/name> refs and load_hf_model (the one network switch)","type":"named","name":"--hf"},{"description":"Advertise the core tools only; all stay callable","type":"named","name":"--tools=core"}]}],"tools":[{"name":"add_connection","description":"Wire two existing layers: a directed edge from \"from\" to \"to\". Fails on self-loops or duplicate edges. The target layer's cached shape is invalidated. Call save_model afterwards to persist.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_layer","description":"Insert a new layer into the model. Provide the layer type, a unique name, optionally an existing layer to auto-connect from, and any layer-specific params. Returns the new layer id. Call save_model afterwards to persist to disk. WARNING: this mutates the model. Call layer_impact first when inserting into the middle of an existing path so you can warn the user about cascading shape changes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"architecture","description":"A library id from list_architectures, e.g. \"qwen2.5-7b\", \"llama-3-8b\", \"bert-base\", \"resnet-50\". Leave blank to have the closest one picked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_design","description":"Get Neurarch's full verdict on this model: is it structurally sound and ready to train, what will a training run cost and how long will it take, which deployment target fits it best and at what latency, and which decisions are still the human's to make. Call this BEFORE proposing an architecture change and again after, so you can say what your edit actually did. Broader than validate_model, which ","write_action":false,"price_micros":0,"input_schema":null},{"name":"compare_layers","description":"Structurally diff two layers: whether they are the same type, their parameter-count delta, whether input/output shapes match, and exactly which param keys differ (only-in-a, only-in-b, and changed values). Use to answer \"are block_0 and block_1 identical?\" before deciding whether an edit to one should mirror to the other, or whether two blocks can share an implementation. Returns null when either ","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_connection","description":"Remove a single directed edge between two existing layers. The target layer's cached shape is invalidated. Fails when no such edge exists. Call save_model afterwards.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_layer","description":"Remove a layer and every connection touching it. Cached shapes on former downstream layers are invalidated and the layer is removed from any groups it belonged to. Returns the list of layers whose shape contracts must be recomputed and the groups affected. Call save_model afterwards. WARNING: this is destructive. Call layer_impact first if the layer sits in the middle of an active path.","write_action":true,"price_micros":0,"input_schema":null},{"name":"describe_architecture","description":"One-call orientation: topologically-ordered layer pipeline, model depth (longest path), input/output shapes, total params and MACs, the top-5 heaviest layers by parameters AND by compute, and a validation rollup. Use this instead of chaining get_model_summary + param_count_by_block + flops_by_block + validate_model \\u2014 it answers \"what is this model and where is the budget\" in a single call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diff_models","description":"Structurally diff the current model against another .neurarch.json file: layers only in current, only in the other, and modified (with field-level changes), plus added/removed connections. Layers are matched by name. Use to review what changed between the model and a saved checkpoint or variant. \"current\" is the loaded model; the file you pass is \"other\", so onlyInCurrent is what this model adds r","write_action":false,"price_micros":0,"input_schema":null},{"name":"explain_finding","description":"What a lint rule or check_design finding means for this model, the evidence behind it, and the smallest edit that clears it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_pytorch","description":"Render the current graph as a runnable PyTorch nn.Module, the same generator behind the app's Export panel. Use it after editing the graph with the write tools, or to hand a zoo:/hf: architecture to the user as code. The source is returned; pass save_to to also write it to a file (honoured only under --write, and never over the .py this server was started from: the graph was derived from that file","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_layers","description":"Search layers by type, name regex, scope prefix, and/or applied augmentation, then optionally rank by parameter count. Answers \"where are all the convolutions?\", \"which layers under encoder.layer.3 are frozen?\", or \"what are the 5 biggest layers?\". Returns name, type, scope, param count, and any augmentations \\u2014 call get_layer for full detail.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_models","description":"Walk a directory for model definitions: .py files declaring an nn.Module subclass and saved .neurarch.json graphs. Each .py is tried against the parser, so the answer distinguishes files this server can read now from ones that need a runtime trace (neurarch-trace). Use it on arrival in an unfamiliar repository, then pass the path you want as model_path to any other tool. Skips node_modules, virtua","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_path","description":"BFS shortest directed path from one layer to another. Answers \"does encoder.0.attention reach lm_head?\" \\u2014 returns the ordered list of layer names along the path, or null when unreachable. Useful before recommending an edit to confirm two layers are actually on the same flow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"flops_by_block","description":"Group MAC counts (FLOPs \\xF7 2) by block, scope, or type. Answers \"where is compute spent?\" \\u2014 pairs with param_count_by_block to find parameter-light but compute-heavy regions (attention) versus the inverse (large MLPs).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_block","description":"Drill into one block (named group, or a scope prefix like \"encoder.layer.0\"): its member layers with per-layer params and FLOPs, the block totals, and the edges crossing the block boundary \\u2014 what feeds the block and what it feeds. Use after list_blocks to understand how a block connects to the rest of the graph before recommending extracting, replacing, or freezing it. Returns null when the n","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_design_notes","description":"Return the model's pinned design rationale: notes the user promoted from advisor warnings or agent replies, or typed manually. Each note has source/title/body/createdAt and optional affected layer ids. Use this to ground recommendations in the user's stated intent for the architecture before suggesting a change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_layer","description":"Return the full definition of a single layer (params, shapes, notes, connections). Looks up by exact name first, then by id, then by case-insensitive substring. Returns null when no match.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_model_summary","description":"Return a one-shot overview of the Neurarch model: layer count, connection count, total parameters, dominant layer types, and the input/output shape. Use this first to orient yourself before drilling into specific layers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"layer_impact","description":"Compute the blast radius of changing a layer (or a regex-matched set): every upstream and downstream layer reachable through connections, flagged for shape sensitivity and weight rebuild requirements. Use this BEFORE recommending a destructive edit so you can warn the user about cascading effects. Mirrors the GitNexus impact tool.","write_action":false,"price_micros":0,"input_schema":null},{"name":"lint_model","description":"Run Neurarch's structural design rules over the model, offline and with no API key: attention head-dim and GQA divisibility, normalization and activation ordering, dropout and feature ranges, missing residuals in deep stacks, and the shape rules that can be decided statically. Returns findings with a stable rule id and severity (block | warn | info). This is the same rule set the Neurarch CI actio","write_action":true,"price_micros":0,"input_schema":null},{"name":"list_architectures","description":"Search the reference library bundled with this server: verified graphs of published architectures (DeepSeek-V3, Qwen2.5, Llama, Mixtral, Whisper, CLIP, BERT, ViT, ResNet and more), each with real dimensions from the model's config and a parameter count checked against the published one. Offline. Any read tool can then be asked about an entry by passing model_path: \"zoo:<id>\", so you can compare th","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_blocks","description":"List the model's collapsed groups (\"blocks\"): name, member count, params, FLOPs. Returns scope-derived blocks (dotted module path prefixes) when no explicit groups exist. Use this to talk about the architecture at a high level instead of layer-by-layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_connections","description":"Return every connection as {from, to, label?}, with optional filters by source or target layer name. Useful when get_layer's upstream/downstream is not enough and the agent needs a flat edge list (e.g. for \"what are all the residual links?\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_hyperparams","description":"Dump the model-level hyperparameter table (learning rate, batch size, dropout, etc.) the user has set in the Neurarch hyperparams panel. Empty object when none defined. These are training-config knobs, NOT per-layer params.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_architecture","description":"Open one reference architecture from the bundled library and describe it: pipeline, depth, parameter and compute hotspots, validation. Pass save_to to write it out as a .neurarch.json the user can edit in the app or start this server on (requires --write). For further questions, pass model_path: \"zoo:<id>\" to any tool.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_hf_model","description":"Build a graph for a Hugging Face model from its config.json and describe it. This is the one tool that reaches the network (huggingface.co only; HF_TOKEN is sent for gated repos), which is why it is listed only when the server runs with --hf. The result says whether it came from the real config or a generic family template (configSource), and quotes the parameter count HF publishes so you can see ","write_action":false,"price_micros":0,"input_schema":null},{"name":"mermaid_diagram","description":"Render the model as Mermaid flowchart syntax (top-down). The caller wraps the result in ```mermaid``` fences. Use sparingly \\u2014 it gets noisy past ~30 layers; pair with namePattern via find_layers to give the user a clearer mental model.","write_action":false,"price_micros":0,"input_schema":null},{"name":"modify_layer","description":"Modify an existing layer: shallow-merge new params, rename, or change scope. Returns a before/after diff. Cached shapes on this layer are invalidated when params change, so the user should reopen the model in Neurarch to recompute shape contracts. Call save_model afterwards. WARNING: shape-changing edits propagate downstream \\u2014 call layer_impact first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"param_count_by_block","description":"Group parameter counts by block (named group), scope (dotted module path), or layer type. Answers \"where do my parameters live?\" \\u2014 useful for finding bloated subnets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"rank_designs","description":"Order several candidate designs for the one decision an agent cannot make by inspection: which of them to spend a training run on. Candidates are model files (model_path), zoo:<id> or hf:<id> references, or inline graphs; include_current adds the model this server holds. Blocked candidates (a pre-flight finding that means the graph will not forward-pass) rank last and are reported as budget you ca","write_action":true,"price_micros":0,"input_schema":null},{"name":"rule","description":"The rule id or finding title, e.g. \"head-dim-divisibility\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_model","description":"Persist the current in-memory model to disk. Writes to the file passed on the command line by default; pass \"path\" to write elsewhere (will overwrite). Call this AFTER add_layer / modify_layer / add_connection \\u2014 those tools only mutate memory. Returns the written path and byte count.","write_action":false,"price_micros":0,"input_schema":null},{"name":"suggest_fix","description":"Turn lint findings into edits to the source file: a unified diff per finding, labelled exact (a number or an order the rule pins, changed on every line that shares it) or proposal (a missing layer inserted with a note on what forward() still needs). Works on a .py; for a .neurarch.json use the write tools. Findings with no mechanical fix come back under notFixable with the reason. Apply the diff, ","write_action":false,"price_micros":0,"input_schema":null},{"name":"trace_model","description":"Trace the model at runtime with neurarch-trace (pip install neurarch-trace) and get a graph with real shapes: instantiate it in Python, run one forward pass with hooks, write a .neurarch.json. Use when find_models or parseQuality says the static parse is thin or partial. target is \"path/to/file.py:ClassOrFactory\", \"module.path:attr\" or \"hf:<repo>\"; input is the batch-first dims per model input. Th","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_model","description":"Run structural invariants over the model: cycles, dangling connection refs, duplicate ids/names, and orphan layers (no upstream / no downstream). Call before recommending a destructive edit so you can flag pre-existing issues separate from your change. Returns a list of findings with severity error|warn.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-20T20:10:43.820Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:10:43.800Z","components":{"code":{"score":20,"max":25,"notes":["4 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/index.js: … ${className}() `; code += ` model.eval() `; if (hasMultipleInputs) { con…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"neurarch-mcp","version":"0.14.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-01T18:49:55.131Z","repositoryUrl":"git+https://github.com/neurarch-ai/neurarch-mcp.git","weeklyDownloads":86}],"repo":{"found":true,"owner":"neurarch-ai","repo":"neurarch-mcp","archived":false,"pushedAt":"2026-09-19T07:37:49Z","stars":1,"forks":1,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/279221743?v=4","ownerCreatedAt":"2026-04-25T09:15:09Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":1,"forks":1,"downloadsWeek":86,"license":"MIT","lastPushAt":"2026-09-19T07:37:49.000Z","score":28}}}},"grade_history":[],"reviews":[]}