DGX Spark (MSI EdgeXpert) and Cubi Nuc: Agents, "The Loop" MSI's EdgeXpert, an Nvidia DGX Spark with 128GB of RAM, can remotely control an MSI Cubi NUC AI+ running Windows 11 to launch programs and run tools, according to a Level1Techs demonstration. The setup runs local models including Nemotron Omni for voice and video and Nemotron Nano for reasoning and agentic tasks, paired with the Turnstone harness and a Windows MCP server that exposes tools to AI agents. The DGX Spark can also run Nemotron Omni Super at NVFP4, which uses about two-thirds of available memory at maximum context, as well as Qwen A35B in NVFP4 format for coding and judging. Here’s the video for context: You may have also heard executives saying that “computers were now using computers” and this is a little bit of insight into what that means. This is the MSI EdgeXpert – an nvidia DGX Spark It has 128gb ram and can run many AI models. We reviewed it separately here https://www.youtube.com/watch?v=sx6ANedcIfI , and even got Steam running on it https://forum.level1techs.com/t/nvidia-spark-gb10-msi-edgexpert-running-steam-games-cyberpunk-2077-doom-eternal-and-more-quickie-how-to/240557 natively preview of RTX spark anyone? . And here’s our Windows 11 MSI Cubi NUC AI+ We also reviewed it separately, here. https://www.youtube.com/watch?v=taqoWdMxKhI The DGX Spark can basically marionette Windows 11, launch programs and run tools on it. The goal is to run local intelligence on the DGX spark and setup a Model Context Protocol MCP server on the MSI Cubi Nuc AI+ mini pc, running windows. There are a lot of models that run well on the DGX spark; for the video we used Nemotron Omni for the voice and video capabilities, and Nemotron Nano for reasoning and agentic tasks. Nvidia has great writeups https://build.nvidia.com/spark/nemotron on how to get this sort of thing going on your spark. The other part of this is Turnstone: Turnstone is a harness which means you can hook up an AI model and give it an ability to do things – tool calling. Typically getting AI to do things effectively quickly, lowest number of tokens, consistently typically depends on tool calling and skills. Skills are often markdown files and, optionally, utility or helper scripts . The skill explains to the AI how to call a tool or tools or helper scripts , how to interpret the output and most importantly what success criteria looks like. This gives the model context for what you have asked it to accomplish, and what success looks like. You may have heard the term Agentic before.. what it means in this context is that your harness software Turnstone in our case could spawn several “chat” sessions that have different instructions but are all working toward the same goal. TODO: PIC That’s why this is called an orchestrator – it’s orchestrating several sessions with the AI model. Think of each of these as an AI chat session except that you have tool calling for generic tools , Skills which can provide their own tools/scripts , and, the big thing in our video here, access to MCP interfaces. So, in summary: - MSI EdgeXpert / DGX Spark - MSI Cubi NUC AI+ running Windows 11 - Turnstone - Windows-MCP - Nemotron Nano / Omni, or another OpenAI-compatible local model endpoint MCP provides a standardized interface layer that also exposes tools and describes functionality. Think of it like an API but with built-in documentation. We can run an MCP server on the Cubi Nuc AI+ and then AI Agents running inside our Turnstone harness have the tools that the MCP server reports. For this demo we’ll be using this Windows MCP server: First, setup the DGX Spark with both the Nemotron Omni and Nemotron Nano models. It is possible to run Nemotron Omni Super on here; at NVFP4 it uses about 2/3 of the available memory at maximum context, and leaves enough room to also run Nemotron Omni in the background for voice and video. And, of course Models like Qwen A35B, also available in NVFP4 format, can run. Qwen makes an excellent coding and judge model, and is reasonably fast. - Install the Nemotron model s you want to use - Confirm the OpenAI-compatible endpoint works. - Test with a simple completion. sudo apt install -y ca-certificates curl gnupg python3-pip python3-venv jq I am assuming your Spark already has docker and the nvidia container toolkit installed. It should. It should also have python3 python3 -m pip install -U "huggingface hub hf xet " --break-system-packages Log into hugging face, or don’t and just have slower downloads hf auth login hf auth whoami export HF TOKEN="$ cat ~/.cache/huggingface/token " mkdir -p ~/models The main setup in the video is 2 main models running on Spark, then some optional other configurations: Nemotron Omni for Speech, Image and Video reasoning Nemotron Nano: A 35B A3B model which is small and competent Optional: Nemotron Super: It’s 120b so it’ll be slower and put more memory pressure on. Tough to get other optional models running at the same time due to memory pressure, especially if you want maximum context. Gemma4 E4B: its just 4 billion effective parameters, but it makes a pretty good “judge” model for Turnstone. Gemma3 12b can also make a good judge, but in BF16 it’ll consume 24gb vram not 12. SFP8 is an option… but Qwen is also amazing And if you’re doing agentic coding tasks, then the 27B NVFP4 version of Qwen is worth a look on this hardware. That is a dense model – all 27 billion parameters are active at once – so it’ll be slower. There is also the 35B A3B version of Qwen 3.6, which runs much faster, but the NVFP4 version was just released and has some bugs in the response template or with tool-calling. However, see note about nvfp4 versions of Qwen HF card: nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4. NVIDIA’s card says to use vLLM, download the custom nano v3 reasoning parser.py, enable auto tool choice, use qwen3 coder, and use FP8 KV cache; it recommends temperature=0.6/top p=0.95 for tool calling. Here’s an example hf download command: hf download nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4 \ --local-dir ~/models/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4 Here’s the full script I used for this one, which will auto download the model if you don’t have it using hf export MODEL ID="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4" export WEIGHTS="$HOME/models/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4" hf download "$MODEL ID" \ --local-dir "$WEIGHTS" \ --max-workers 8 test -f "$WEIGHTS/config.json" && echo "weights OK" test -f "$WEIGHTS/nano v3 reasoning parser.py" || \ curl -L -o "$WEIGHTS/nano v3 reasoning parser.py" \ https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4/resolve/main/nano v3 reasoning parser.py docker run --rm -it \ --name vllm-nemotron3-nano \ --gpus all \ --ipc=host \ --shm-size=16g \ -p 8000:8000 \ -e HF TOKEN="$HF TOKEN" \ -e VLLM USE FLASHINFER MOE FP4=1 \ -e VLLM FLASHINFER MOE BACKEND=throughput \ -v "$WEIGHTS:/model:ro" \ -v "$WEIGHTS/nano v3 reasoning parser.py:/app/nano v3 reasoning parser.py:ro" \ vllm/vllm-openai:v0.20.0 \ /model \ --served-model-name nvidia/nemotron-3-nano \ --host 0.0.0.0 \ --port 8000 \ --trust-remote-code \ --tensor-parallel-size 1 \ --max-model-len 262144 \ --max-num-seqs 8 \ --gpu-memory-utilization 0.85 \ --kv-cache-dtype fp8 \ --enable-auto-tool-choice \ --tool-call-parser qwen3 coder \ --reasoning-parser-plugin /app/nano v3 reasoning parser.py \ --reasoning-parser nano v3 The first time you create and run this script you will get output like: as it downloads the model to ~/.model Build page: nvidia/nemotron-3-nano-omni-30b-a3b-reasoning . HF: nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4 . NVIDIA describes it as multimodal: video, audio, image, and text, with OCR/speech/video/document workflows. The Spark-specific Build recipe uses vLLM 0.20.0, mounts local weights, installs vllm audio inside the container, enables multimodal limits, sets video FPS/frames, and enables tool calling with the qwen3 coder style tool calling template. Script I used for the video to download, then run Omni: hf download nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4 \ --local-dir /models/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4 bash /usr/bin/env bash set -euo pipefail MODEL BASE="${HOME}/models" MODEL NAME="Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4" MODEL DIR="${MODEL BASE}/${MODEL NAME}" CONTAINER MODEL DIR="/models/${MODEL NAME}" CONTAINER NAME="vllm-nemotron3-omni" PORT="8001" echo "Starting Nemotron 3 Nano Omni on http://localhost:${PORT}/v1" echo "Host model path: ${MODEL DIR}" echo "Container model path: ${CONTAINER MODEL DIR}" if -f "${MODEL DIR}/config.json" ; then echo "ERROR: ${MODEL DIR}/config.json not found." echo echo "Download the model first:" echo "hf download nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4 \\" echo " --local-dir ${MODEL DIR}" exit 1 fi docker rm -f "${CONTAINER NAME}" 2 /dev/null || true docker run -d \ --name "${CONTAINER NAME}" \ --restart unless-stopped \ --gpus all \ --ipc=host \ --shm-size=16g \ -p "${PORT}:8000" \ -e HF TOKEN="${HF TOKEN:-}" \ -e FLASHINFER DISABLE VERSION CHECK=1 \ -v "${MODEL DIR}:${CONTAINER MODEL DIR}:ro" \ vllm/vllm-openai:v0.20.0 \ "${CONTAINER MODEL DIR}" \ --served-model-name nvidia/nemotron-3-nano-omni \ --host 0.0.0.0 \ --port 8000 \ --max-num-seqs 1 \ --max-model-len 32768 \ --trust-remote-code \ --gpu-memory-utilization 0.25 \ --limit-mm-per-prompt '{"video": 1, "image": 1, "audio": 1}' \ --media-io-kwargs '{"video": {"fps": 2, "num frames": 128}}' \ --allowed-local-media-path / \ --max-num-batched-tokens 16384 \ --reasoning-parser nemotron v3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3 coder echo "Nemotron 3 Nano Omni is starting on http://localhost:${PORT}/v1" echo "Logs: docker logs -f ${CONTAINER NAME}" echo "Models: curl -sS http://localhost:${PORT}/v1/models | jq" Optional; use this instead of Nemotron 3 Nano or Qwen3.6 27B bash /usr/bin/env bash set -euo pipefail MODEL BASE="${HOME}/models" MODEL NAME="NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4" MODEL DIR="${MODEL BASE}/${MODEL NAME}" CONTAINER MODEL DIR="/models/${MODEL NAME}" CONTAINER NAME="vllm-nemotron3-super" PORT="8002" VLLM IMAGE="vllm/vllm-openai:v0.20.0" echo "Starting Nemotron 3 Super 120B A12B NVFP4 on http://localhost:${PORT}/v1" echo "Host model path: ${MODEL DIR}" echo "Container model path: ${CONTAINER MODEL DIR}" echo "vLLM image: ${VLLM IMAGE}" if -f "${MODEL DIR}/config.json" ; then echo "ERROR: ${MODEL DIR}/config.json not found." echo echo "Download the model first:" echo "hf download nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 \\" echo " --local-dir ${MODEL DIR}" exit 1 fi if -f "${MODEL DIR}/super v3 reasoning parser.py" ; then echo "ERROR: ${MODEL DIR}/super v3 reasoning parser.py not found." echo echo "Re-run:" echo "hf download nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 \\" echo " --local-dir ${MODEL DIR}" exit 1 fi docker rm -f "${CONTAINER NAME}" 2 /dev/null || true docker run -d \ --name "${CONTAINER NAME}" \ --restart unless-stopped \ --gpus all \ --ipc=host \ --shm-size=16g \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ -p "${PORT}:8000" \ -e HF TOKEN="${HF TOKEN:-}" \ -e VLLM NVFP4 GEMM BACKEND=marlin \ -e VLLM ALLOW LONG MAX MODEL LEN=1 \ -e VLLM FLASHINFER ALLREDUCE BACKEND=trtllm \ -e VLLM USE FLASHINFER MOE FP4=0 \ -v "${MODEL DIR}:${CONTAINER MODEL DIR}:ro" \ -v "${MODEL DIR}/super v3 reasoning parser.py:/app/super v3 reasoning parser.py:ro" \ "${VLLM IMAGE}" \ --model "${CONTAINER MODEL DIR}" \ --served-model-name nvidia/nemotron-3-super \ --host 0.0.0.0 \ --port 8000 \ --async-scheduling \ --dtype auto \ --kv-cache-dtype fp8 \ --tensor-parallel-size 1 \ --pipeline-parallel-size 1 \ --data-parallel-size 1 \ --trust-remote-code \ --gpu-memory-utilization 0.90 \ --enable-chunked-prefill \ --max-num-seqs 4 \ --max-model-len 1000000 \ --moe-backend marlin \ --mamba ssm cache dtype float16 \ --quantization fp4 \ --speculative config '{"method":"mtp","num speculative tokens":3,"moe backend":"triton"}' \ --reasoning-parser-plugin /app/super v3 reasoning parser.py \ --reasoning-parser super v3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3 coder echo "Nemotron 3 Super is starting on http://localhost:${PORT}/v1" echo "Logs: docker logs -f ${CONTAINER NAME}" echo "Models: curl -sS http://localhost:${PORT}/v1/models | jq" This is optiona; you should look at the ALTERNATE WAY section below. The judge in turnstone typically needs 64k+ context; this can put some strain on on the configuration. bash /usr/bin/env bash set -euo pipefail MODEL BASE="${HOME}/models" Replace this with the exact downloaded Gemma 4 judge model directory. Examples might be something like: gemma-4-e4b-it gemma-4-e4b-it-sfp8 gemma-4-26b-a4b-it MODEL NAME="gemma-4-e4b-it" MODEL DIR="${MODEL BASE}/${MODEL NAME}" CONTAINER MODEL DIR="/models/${MODEL NAME}" CONTAINER NAME="vllm-gemma4-judge" PORT="8003" echo "Starting Gemma 4 judge model on http://localhost:${PORT}/v1" echo "Host model path: ${MODEL DIR}" echo "Container model path: ${CONTAINER MODEL DIR}" if -f "${MODEL DIR}/config.json" ; then echo "ERROR: ${MODEL DIR}/config.json not found." echo echo "Download the model first, for example:" echo "hf download google/${MODEL NAME} \\" echo " --local-dir ${MODEL DIR}" exit 1 fi docker rm -f "${CONTAINER NAME}" 2 /dev/null || true docker run -d \ --name "${CONTAINER NAME}" \ --restart unless-stopped \ --gpus all \ --ipc=host \ --shm-size=8g \ -p "${PORT}:8000" \ -e HF TOKEN="${HF TOKEN:-}" \ -e FLASHINFER DISABLE VERSION CHECK=1 \ -v "${MODEL DIR}:${CONTAINER MODEL DIR}:ro" \ vllm/vllm-openai:v0.20.0 \ "${CONTAINER MODEL DIR}" \ --served-model-name google/gemma-4-judge \ --host 0.0.0.0 \ --port 8000 \ --trust-remote-code \ --tensor-parallel-size 1 \ --dtype auto \ --max-model-len 65535 \ --max-num-seqs 2 \ --gpu-memory-utilization 0.25 \ --kv-cache-dtype fp8 \ --enable-prefix-caching echo "Gemma 4 judge model is starting on http://localhost:${PORT}/v1" echo "Logs: docker logs -f ${CONTAINER NAME}" echo "Models: curl -sS http://localhost:${PORT}/v1/models | jq" Note: Do not try to run all four models at once If you’re running nvfp4 Super then you might not even want to run Omni They are also amazing models They need vllm nightly, and sometimes the chat template or mtp can be sketchy. That’s one thing I’ve been stuck on the last few weeks.. it can be the difference between 15 and 45 t/s.. plus everyone always overlooks the utility and coherence of the model output. We want that to be as high as possible. Here are some starter scripts for Qwen3.6 A35B: bash /usr/bin/env bash set -euo pipefail MODEL BASE="${HOME}/models" MODEL NAME="Qwen3.6-35B-A3B-NVFP4" MODEL DIR="${MODEL BASE}/${MODEL NAME}" CONTAINER MODEL DIR="/models/${MODEL NAME}" CONTAINER NAME="vllm-qwen36-35b-a3b" PORT="8005" Official model card says vllm/vllm-openai:nightly. Community reports v0.23.0-class images also work on DGX Spark. VLLM IMAGE="${VLLM IMAGE:-vllm/vllm-openai:nightly}" echo "Starting Qwen3.6 35B A3B NVFP4 on http://localhost:${PORT}/v1" echo "Host model path: ${MODEL DIR}" echo "Container model path: ${CONTAINER MODEL DIR}" echo "vLLM image: ${VLLM IMAGE}" if -f "${MODEL DIR}/config.json" ; then echo "ERROR: ${MODEL DIR}/config.json not found." echo echo "Download the model first:" echo "hf download nvidia/Qwen3.6-35B-A3B-NVFP4 \\" echo " --local-dir ${MODEL DIR}" exit 1 fi docker rm -f "${CONTAINER NAME}" 2 /dev/null || true docker run -d \ --name "${CONTAINER NAME}" \ --restart unless-stopped \ --gpus all \ --ipc=host \ --shm-size=16g \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ -p "${PORT}:8000" \ -e HF TOKEN="${HF TOKEN:-}" \ -e FLASHINFER DISABLE VERSION CHECK=1 \ -e VLLM USE FLASHINFER MOE FP4=0 \ -e VLLM FP8 MOE BACKEND=flashinfer cutlass \ -e CUTE DSL ARCH=sm 121a \ -e VLLM ALLOW LONG MAX MODEL LEN=1 \ -v "${MODEL DIR}:${CONTAINER MODEL DIR}:ro" \ --entrypoint /bin/bash \ "${VLLM IMAGE}" \ -lc "exec vllm serve '${CONTAINER MODEL DIR}' \ --served-model-name nvidia/qwen3.6-35b-a3b \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 1 \ --trust-remote-code \ --dtype auto \ --kv-cache-dtype fp8 \ --quantization modelopt \ --attention-backend flashinfer \ --moe-backend marlin \ --gpu-memory-utilization 0.40 \ --max-model-len 262144 \ --max-num-seqs 4 \ --max-num-batched-tokens 8192 \ --enable-chunked-prefill \ --async-scheduling \ --enable-prefix-caching \ --load-format fastsafetensors \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3 xml \ --speculative-config '{\"method\":\"mtp\",\"num speculative tokens\":3,\"moe backend\":\"triton\"}'" echo "Qwen3.6 35B A3B NVFP4 is starting on http://localhost:${PORT}/v1" echo "Logs: docker logs -f ${CONTAINER NAME}" echo "Models: curl -sS http://localhost:${PORT}/v1/models | jq" Understand that generally I’ve found the 27B model to be the most coherent on this model, but also much slower. The further wrinkle is that the Unsloth 4 bit quant version of Qwen3.6 27B doesn’t seem to have the same chat template/tool calling bugs the NVFP4 version does. This is something that will have to be updated in this guide over time as things evolve. Watch the video for more context/nuance. Note: For all these example scripts the context length and the gpu memory utilization is a bit fungible. You’re meant to think about that and play with that number a bit as you come up with something that would work for your use case. curl -fsSL https://raw.githubusercontent.com/turnstonelabs/turnstone/main/run.sh | bash …Check out the video for setting up Turnstone; it’s pretty slick. Make sure that at least one AI container is running because the installer can connect to the AI container to get it to help you set everything up. ALTERNATE WAY: So if you have any experience here, you may be questioning the wisdom of running multiple vLLM containers on DGX spark. That might not be a best fit for what we want to accomplish. So check this out: turnstone/turnstone/deploy/vllm-litellm at main · turnstonelabs/turnstone · GitHub https://github.com/turnstonelabs/turnstone/tree/main/turnstone/deploy/vllm-litellm Reasoning, Perception and re-ranking models at once this also applies to Strix Halo This is using Qwen 3.6 27B in nvfp4; vLLM nightly has had some performance regressions at the time of this write-up, but it is possible to achieve about 20t/s. This also works natively with HF HOME so you don’t need to manually download models to the ~/models dir and, infact, you shouldn’t . This way gives you more model more context functionality, and uses 117 of the 121gb memory on my system. Install python 3, and ux, etc python -m uv tool run windows-mcp serve --transport streamable-http --host 192.168.0.115 --port 8000 --auth-key ItsForTheLulzOrWhateverYouChose HF card: nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 . This is one of the best models that can be run on Spark, but it is slower: 120B total, 12B active, NVFP4, tool calling, and MTP. The Spark-specific HF command uses vllm/vllm-openai:v0.20.0 , VLLM NVFP4 GEMM BACKEND=marlin , --quantization fp4 , --speculative config '{"method":"mtp","num speculative tokens":3,...}' script: bash /usr/bin/env bash set -euo pipefail MODEL BASE="${HOME}/models" MODEL NAME="NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4" MODEL DIR="${MODEL BASE}/${MODEL NAME}" CONTAINER MODEL DIR="/models/${MODEL NAME}" CONTAINER NAME="vllm-nemotron3-super" PORT="8002" VLLM IMAGE="vllm/vllm-openai:v0.20.0" echo "Starting Nemotron 3 Super 120B A12B NVFP4 on http://localhost:${PORT}/v1" echo "Host model path: ${MODEL DIR}" echo "Container model path: ${CONTAINER MODEL DIR}" echo "vLLM image: ${VLLM IMAGE}" if -f "${MODEL DIR}/config.json" ; then echo "ERROR: ${MODEL DIR}/config.json not found." echo echo "Download the model first:" echo "hf download nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 \\" echo " --local-dir ${MODEL DIR}" exit 1 fi if -f "${MODEL DIR}/super v3 reasoning parser.py" ; then echo "ERROR: ${MODEL DIR}/super v3 reasoning parser.py not found." echo echo "Re-run the HF download or fetch the parser from the model repo." exit 1 fi docker rm -f "${CONTAINER NAME}" 2 /dev/null || true docker run -d \ --name "${CONTAINER NAME}" \ --restart unless-stopped \ --gpus all \ --ipc=host \ --shm-size=16g \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ -p "${PORT}:8000" \ -e HF TOKEN="${HF TOKEN:-}" \ -e VLLM NVFP4 GEMM BACKEND=marlin \ -e VLLM ALLOW LONG MAX MODEL LEN=1 \ -e VLLM FLASHINFER ALLREDUCE BACKEND=trtllm \ -e VLLM USE FLASHINFER MOE FP4=0 \ -e FLASHINFER DISABLE VERSION CHECK=1 \ -v "${MODEL DIR}:${CONTAINER MODEL DIR}:ro" \ -v "${MODEL DIR}/super v3 reasoning parser.py:/app/super v3 reasoning parser.py:ro" \ "${VLLM IMAGE}" \ "${CONTAINER MODEL DIR}" \ --served-model-name nvidia/nemotron-3-super \ --host 0.0.0.0 \ --port 8000 \ --async-scheduling \ --dtype auto \ --kv-cache-dtype fp8 \ --tensor-parallel-size 1 \ --pipeline-parallel-size 1 \ --data-parallel-size 1 \ --trust-remote-code \ --gpu-memory-utilization 0.90 \ --enable-chunked-prefill \ --max-num-seqs 4 \ --max-model-len 1000000 \ --moe-backend marlin \ --mamba ssm cache dtype float16 \ --quantization fp4 \ --speculative config '{"method":"mtp","num speculative tokens":3,"moe backend":"triton"}' \ --reasoning-parser-plugin /app/super v3 reasoning parser.py \ --reasoning-parser super v3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3 coder echo "Nemotron 3 Super is starting on http://localhost:${PORT}/v1" echo "Logs: docker logs -f ${CONTAINER NAME}" echo "Models: curl -sS http://localhost:${PORT}/v1/models | jq" and configure the mcp sever: Note that you need Authorization: Bearer and then the token you specified on the CLI. I also recommend you setup TLS as in the TLS example for this windows MCP server so that the communications layer is encrypted on your lan, but one problem at a time. You should see: you may also want to click Sync to nodes I was surprised by how unnecessarily cumbersome this was. The whole secret, and the place where the Hermes installer breaks down for the uninitiated, is that they make it too easy to break if you don’t want to cloud-host your AI, or go through their router. The desktop gui did not work for setting up a http://192.168.x.y http://192.168.x.y . type local address. 1. Install Hermes their website/walkthrough is sufficient for this . 2. You can create an account, but when it asks for an ai provider you can go with defaults or skip over it. 3. run a terminal and do hermes setup. Pick FULL setup. 4. For the model provider, pick custom, around option 32. 5. Enter the url and port of the DGX Spark/EdgeXpert: http://192.168.0.166:8000/v1 http://192.168.0.166:8000/v1 6. it should auto detect the model and context. You want to use the smartest model with hermes, ideally. If you have two sparks you can try the new deepseek v4 flash nvfp4, or even run “only” the nemotron 120b parameter model as well. As shown in the video, it’s pretty impressive to go from this: to this to this in just a few minutes. This is very basic, but if you want something a little more advanced.. i.e. a skill that can use bash for example, check this out: This blog post is a year old at the time I’m writing this, but it still pretty relevant for wrapping your head around the possibilities. And everything has moved 10 years in the last year, so it’s even better: Create Your Own Bash Computer Use Agent with NVIDIA Nemotron in One Hour | NVIDIA Technical Blog https://developer.nvidia.com/blog/create-your-own-bash-computer-use-agent-with-nvidia-nemotron-in-one-hour/?ncid=pa-srch-goog-800119& bt=806892606897& bk=building%20an%20ai%20agent& bm=p& bn=g& bg=199556538841&gad source=1&gad campaignid=23676241337&gbraid=0AAAAAD4XAoG2jbMngIF7gfmWQmGOR30Jf&gclid=EAIaIQobChMIkJyqi9bFlQMVnIzCCB0m2illEAAYASAAEgJbhfD BwE Anthropic also has a skills repo on GitHub if you want to read and understand. https://github.com/anthropics/skills