This is the shortest path for trying Blacknode as an agent-controllable visual workflow builder.
- Python 3.11 or newer
- Node.js 20.19+ or 22.12+
- A local MCP client such as Claude Desktop or Cursor
- Optional: a NVIDIA NIM, OpenAI, or Anthropic API key for LLM demos
The no-API-key smoke test works without model credentials.
From the repository root on Windows:
start.batFrom the repository root on macOS/Linux:
chmod +x start.sh
./start.shThese launchers install local dependencies if needed, start the FastAPI backend at http://127.0.0.1:7777, restart an old Blacknode editor on port 3000 if needed, start the Vite editor at http://localhost:3000, and open the browser. On Windows, start.bat keeps one launcher window open and writes service logs to .local-logs/.
If you see Stopping existing visual editor on port 3000..., the launcher
found an old Blacknode Vite server and restarted it so the editor stays on
http://localhost:3000.
If the same checkout is used from Windows and WSL/Linux/macOS, the launchers
check Vite's native dependency for the current OS and run npm install when
that dependency needs repair.
Manual start:
cd editor-server
python server.pyIn another terminal:
cd editor
npm run devInstall the package locally so blacknode mcp is available:
pip install -e ".[mcp]"Add this to your MCP client config:
{
"mcpServers": {
"blacknode": {
"command": "blacknode",
"args": ["mcp"]
}
}
}Restart the MCP client after saving the config.
For MCP clients that require streamable HTTP, including NVIDIA AI-Q or NeMo Agent Toolkit workflows, start the same tool surface over HTTP:
blacknode mcp --transport streamable-http --host 127.0.0.1 --port 9901 --path /mcpEndpoint:
http://127.0.0.1:9901/mcp
Put this in your MCP client's project instructions or system prompt so agents use learned nodes only when a reusable capability is missing:
When building Blacknode workflows, always inspect the existing node catalog first
with list_nodes and get_node_schema.
Use built-in nodes whenever they can solve the task exactly.
If the task needs a reusable capability that is missing from the catalog, create
a learned node with create_node_type instead of using one-off Python code.
Do not treat a brittle approximation as a match. For example, if the user asks
to parse RSS article titles and only a generic regex extractor exists, create a
learned node that parses RSS structurally instead of returning feed metadata or
other false positives.
Do not create or modify files under nodes/learned directly. Use
create_node_type, list_learned_nodes, get_learned_node_source,
promote_learned_node, and delete_learned_node.
Before creating a learned node:
- keep the interface small and typed
- use requires_network=false unless network is strictly required
- generate only a def run(...) function
- make sure learned-node code matches the declared inputs and outputs
- set `category` when the node belongs in an existing or user-defined palette
group such as `RAG`, `Search`, `Parsing`, `Vision`, or `Research`
After creating a learned node:
- call list_learned_nodes to confirm it exists
- use it in the visual workflow
- validate the workflow
- open it in the editor
- cook the final Output node
The Blacknode MCP server also exposes this same rule as:
- server instructions in the MCP
initializeresponse - the
blacknode_workflow_builderMCP prompt - the
blacknode://agent-instructionsMCP resource
Use this first. It proves the agent can inspect schemas, build a graph, validate it, run it, and export Python without external services.
Using the blacknode MCP tools, list the available node types, show the schema for Text, Concat, and Output, then create a simple workflow that concatenates "Hello" and " World", validates it, runs it, and exports it as Python.
Expected result:
list_nodesreturns registered node types.get_node_schemareturns typed ports.- The workflow validates.
run_workflowreturnsHello World.export_pythonreturns a runnable Python script.
Learned-node creation is opt-in because agents can create new Python code that will execute on your machine in a Docker sandbox.
$env:BLACKNODE_LEARNED_NODES_CONSENT="1"After opt-in, MCP exposes:
| Tool | Use |
|---|---|
create_node_type |
Create a reusable learned node from Python source plus manifest fields. |
list_learned_nodes |
List learned nodes stored on disk. |
get_learned_node_source |
Inspect learned-node source read-only. |
promote_learned_node |
Migrate a stable learned node into custom-nodes/ or community-nodes/. |
delete_learned_node |
Delete a learned node after confirm=True. |
Generated learned nodes appear in the editor palette under their requested category, default to Learned, and run through Docker, not in the host Python process.
Use this after the editor backend and browser are running.
Using the blacknode MCP tools, open a new organized editor tab named "MCP Preview Smoke" with a Text node connected to an Output node. The Text value should be "Blacknode MCP works". Then cook out.value in the editor.
Expected result:
- A new tab opens in the editor.
- The graph is organized on the canvas.
- The Output node displays the cooked value.
- The Runs panel records the execution.
Requires a NVIDIA API key saved in the editor Model node or available as NVIDIA_API_KEY.
Using the blacknode MCP tools, run the template nvidia-nim-mcp-demo in the running editor as an organized tab named "NVIDIA NIM MCP Demo", then cook out.value.
Expected result:
- The tracked template opens visually.
- The graph cooks through NVIDIA NIM.
- The Output node shows the model result.
- The Runs panel shows model-call events and timings.
From the repository root:
python scripts\smoke_test_mcp.py
python -m pytest tests\test_mcp_tools.pyExpected result:
- MCP smoke test reports the server as healthy.
- MCP tests pass.
If the MCP client cannot find blacknode, run:
pip install -e ".[mcp]"
blacknode mcpIf editor tools fail, make sure editor-server/server.py is running at http://127.0.0.1:7777.
If model calls fail, confirm the provider key is saved in the editor or present in the environment:
NVIDIA_API_KEYOPENAI_API_KEYANTHROPIC_API_KEY