naja-scope
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open_schematicA | Serve an interactive browser schematic of the current design. Returns a local URL to open on the MCP server's machine; requires the schematic extra. Uses the loaded design and supports anonymous #id instances. |
| annotate_schematicA | Replace schematic annotations on instances or pins/ports. Returns the local viewer URL and count. Annotations clear when the design changes. |
| get_schematic_selectionA | Return the last browser-selected instance as a naja-scope path, or null. Use the returned path with module-card, source, or hierarchy tools. |
| statusA | Inspect the current in-memory session without changing it. Use this
before design queries to confirm a design is loaded and whether get_intent
is live ( |
| load_systemverilogA | Elaborate local SystemVerilog sources into the active design session.
Use this for SystemVerilog RTL; use load_vhdl for VHDL (beta), or
load_verilog with load_liberty/load_primitives for a
structural gate netlist. Requires at least |
| load_verilogA | Load local gate-level or structural Verilog into the active session.
First call load_liberty for Liberty cells or load_primitives for built-ins;
use load_systemverilog instead for RTL elaboration. Unknown modules fail
unless |
| load_vhdlA | Load VHDL into the active session (beta, restricted two-state RTL subset). Load dependency/package files first, one call per file, then the top file. Package-only files or entities awaiting generics may return top=null. Use hierarchy, cards and connectivity queries on the elaborated design. SystemVerilog intent recovery is unavailable; source ranges are not guaranteed. Unsupported constructs may fail during beta development. Returns the top summary when elaborated, language and beta status. |
| load_libertyA | Register standard-cell models from local Liberty |
| load_primitivesA | Register primitive models in the active session from either a built-in
|
| save_snapshotA | Write the active design and source metadata to a local directory for fast reload. Use after loading a design; load_snapshot reads the result. Existing snapshot files in the directory may be overwritten. Snapshots are tied to their producing najaeda version, and returns include the saved path. |
| load_snapshotA | Load a compatible save_snapshot directory into the active session in seconds instead of re-elaborating. Use load_systemverilog/load_verilog/load_vhdl when no compatible snapshot exists. The directory must match this najaeda version. intent=True also re-elaborates the warm intent layer from the flist saved in the snapshot (for get_intent). |
| reset_universeA | Discard the active design and all in-memory session state. Use before
starting an unrelated design; do not use merely to inspect status. This is
destructive to the current session but does not delete source or snapshots.
Repeating it is safe and returns |
| resolveA | Resolve a known hierarchical object path to instance, term, or net
descriptors with source references. The final segment accepts a glob and
bit selects (for example |
| findA | Search case-sensitive object names across the loaded design with a glob.
Use this when an exact path is unknown; use resolve once a path is known or
get_hierarchy to browse structure. A dot in |
| get_hierarchyA | Browse the instance tree below |
| get_driversA | List the immediate upstream endpoints that drive a term or net across
hierarchy. Use this for direct sources; use get_loads for downstream readers
or trace_cone for the transitive combinational fanin. Returns leaf drivers
(FF/gate instances with pin, model, source ref) and top-level ports.
Lowered assign glue is traversed rather than reported as an endpoint.
Literal assign drivers include |
| get_loadsA | List the immediate downstream endpoints that consume a term or net
across hierarchy. Use this for direct readers; use get_drivers for upstream
sources or trace_cone for the transitive combinational fanout. Returns leaf
readers
(instances with pin, model, source ref) and top-level ports. Lowered assign
glue is traversed rather than reported as an endpoint.
Capped at limit (default 50, max 200) with a |
| trace_coneA | Trace the combinational fanin/fanout cone of a term/net via naja's
LogicCone. Use this for transitive logic reachability; use get_drivers or
get_loads for only immediate endpoints. direction: fanin|fanout. The cone
crosses hierarchy and
combinatorial arcs and always stops at flops, top ports, and opaque
black-box cells. Returns node_count, counts_by_kind, counts_by_model, and a
|
| get_sourceA | Read the bounded SystemVerilog source excerpt that produced an object
(for example, an FF instance maps to its |
| get_module_cardA | Deterministic module summary: ports, instance counts by model, sequential count, source ref, plus clock/reset candidates — a name-based regex guess, not a structural result; verify before relying on it. Use this for one model's interface; use get_stats for counts below an instance. |
| get_statsA | Summarize instance population by model below |
| get_intentA | Retrieve source-level intent that netlist lowering erases (warm-only). Use when the answer is in the SystemVerilog type/declaration, not the flattened gates: enum/typedef state names + encodings (incl. PACKAGE typedefs whose members live in another file), and symbolic PARAMETER expressions (the formula behind a baked-in width). ref: a hierarchical path ('cva6.csr_regfile_i.priv_lvl_q'), a package member ('riscv::PLEN'), or an instance path for its parameters. want: auto | type | fsm_states | parameters. If the intent layer is not loaded, returns a note and you should fall back to get_source. |
| load_intentA | Make the warm source-intent layer available for get_intent. Use after a
SystemVerilog load that did not retain intent; do not call for VHDL or gate-level
Verilog, and prefer |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
Each tool targets a clearly distinct resource or action: per-language/level loaders, session lifecycle, hierarchical/name/connectivity queries, source/intent retrieval, and schematic interaction. Descriptions explicitly cross-reference alternatives (e.g., resolve vs find, get_drivers vs get_loads vs trace_cone), so no two tools appear interchangeable.
Most names follow a predictable snake_case pattern with clear families: load_*, get_*, and action_* (save_snapshot, open_schematic, annotate_schematic, trace_cone). However, single-word names like resolve, find, and status break the dominant verb_noun convention, keeping it from a perfect score.
At 23 tools, the surface is heavy for the typical 3–15 sweet spot. Although each tool maps to a distinct EDA workflow, the seven load_* variants in particular make the set feel borderline oversized and invite consolidation.
The set covers loading multiple HDL/model formats, session lifecycle (status, reset, save/load snapshot), hierarchy and name search, connectivity tracing, source/intent retrieval, and schematic interaction. Only minor gaps exist, such as no direct enumeration of assign glue or snapshot deletion/listing.