Agent-facing MCP query layer over najaeda: navigate elaborated SystemVerilog designs without loading source into context.
Project description
naja-scope
Let your AI assistant explore SystemVerilog designs — without pasting source code into the chat.
naja-scope is an MCP server that gives AI agents (Claude, and any MCP-compatible assistant) a precise, structured view of your elaborated SystemVerilog design. Instead of dumping thousands of lines of RTL into the model's context, the agent asks targeted questions — what drives this signal? what's inside this module? where does this net come from? — and gets back small, exact answers with file-and-line references.
Built on the najaeda netlist engine.
Why
Large designs don't fit in a chat window. Pasting RTL is slow, expensive, and the model still can't reliably trace connectivity across hierarchy. naja-scope turns your design into something an agent can navigate:
- 🔎 Trace connectivity — find what drives or loads any signal, across module boundaries.
- 🌲 Walk the hierarchy — explore modules, instances, and ports on demand.
- 🎯 Jump to source — every answer comes with
file:lineranges, so the agent can quote the exact RTL that matters. - 🧩 Logic cones — trace fan-in / fan-out combinational cones up to the register boundary.
- 💡 Recover design intent — enum state names, struct/union fields, and parameter formulas that normally vanish when a design is elaborated.
All responses are token-bounded: lists paginate, large results truncate with clear markers. Your context stays small; your answers stay accurate.
Does it actually help?
We ran a head-to-head on CVA6 (a
production RISC-V core): the same 17 design questions, answered by Claude once
with only naja-scope and once with only grep/file reading over the
source tree.
| Approach | Correct answers | Conversation turns | Input tokens |
|---|---|---|---|
| naja-scope | 17 / 17 | 77 | 182 k |
| grep + read source | 10 / 17 | 123 | 888 k |
More correct answers, fewer back-and-forth turns, and ~5× fewer tokens — the agent stops scrolling through files and goes straight to the structural answer.
Install
pip install naja-scope
That's it — najaeda and the MCP runtime come along automatically.
Connect it to Claude Code
claude mcp add naja-scope -- naja-scope-mcp
Or add it to any MCP client's config:
{
"mcpServers": {
"naja-scope": {
"command": "naja-scope-mcp"
}
}
}
Then just ask your assistant to load a design and start exploring:
"Load my UART design from
rtl/uart.svwith topuart_top, then show me everything that drivestx_o."
The agent loads the design once and answers follow-up questions instantly — no re-reading source, no giant pastes.
What you can ask
Once a design is loaded, your assistant can:
- Resolve any signal or instance by hierarchical path (with glob and did-you-mean suggestions).
- Find objects design-wide by pattern.
- Show the hierarchy of any module.
- Get drivers / loads of a net — the real endpoints, across hierarchy.
- Trace logic cones (fan-in / fan-out) and see the register frontier.
- Get source — the exact SystemVerilog lines behind any object.
- Get a module card — ports, counts, clock/reset at a glance.
- Recover design intent — state-machine names, struct fields, parameter expressions lost during elaboration.
Requirements
- Python 3.10+
- Works anywhere
najaedaruns (Linux, macOS)
Support & contact
- 🐛 Found a bug or have a feature request? Open an issue on GitHub →
- 📫 Get in touch: contact@keplertech.io
License
Apache-2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file naja_scope-0.1.1.tar.gz.
File metadata
- Download URL: naja_scope-0.1.1.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67bd58055c49fb845aa3601d6c56e9913094383069307798d3378e8642ff893a
|
|
| MD5 |
e5a2440baef386cef159c2cce069677b
|
|
| BLAKE2b-256 |
2dbb5bb45f578030bc4c70306be59da54db0903ec2ff201f5dcbcaac13b2fc5e
|
Provenance
The following attestation bundles were made for naja_scope-0.1.1.tar.gz:
Publisher:
publish.yml on najaeda/naja-scope
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
naja_scope-0.1.1.tar.gz -
Subject digest:
67bd58055c49fb845aa3601d6c56e9913094383069307798d3378e8642ff893a - Sigstore transparency entry: 2013385497
- Sigstore integration time:
-
Permalink:
najaeda/naja-scope@6495df94108a0f1b8445ac25d18db4328886ca21 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/najaeda
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6495df94108a0f1b8445ac25d18db4328886ca21 -
Trigger Event:
push
-
Statement type:
File details
Details for the file naja_scope-0.1.1-py3-none-any.whl.
File metadata
- Download URL: naja_scope-0.1.1-py3-none-any.whl
- Upload date:
- Size: 43.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9aa62bc395553dfbce656affbfd2a6966f4a74124e79a62edec59507861d80e1
|
|
| MD5 |
2931996d6185ca042a81935aac185e65
|
|
| BLAKE2b-256 |
de08ff071f31db91195a7c8ff7bc6362c3abe6f2255b80325ba163797f6f56f8
|
Provenance
The following attestation bundles were made for naja_scope-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on najaeda/naja-scope
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
naja_scope-0.1.1-py3-none-any.whl -
Subject digest:
9aa62bc395553dfbce656affbfd2a6966f4a74124e79a62edec59507861d80e1 - Sigstore transparency entry: 2013385708
- Sigstore integration time:
-
Permalink:
najaeda/naja-scope@6495df94108a0f1b8445ac25d18db4328886ca21 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/najaeda
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6495df94108a0f1b8445ac25d18db4328886ca21 -
Trigger Event:
push
-
Statement type: