NetLogoBLOCK
The first MCP (Model Context Protocol) server for NetLogo, enabling AI assistants like Claude to create, run, and analyze agent-based models through natural conversation.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
The first MCP (Model Context Protocol) server for NetLogo — enabling AI assistants to create, run, and analyze agent-based models through natural conversation.
Works with: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code (Copilot), Cline, Continue, Roo Code, Zed, OpenCode, Codex — any tool that supports MCP.
Why NetLogo MCP?
As an AI student taking an Agent-Based Modeling course, I searched for an MCP server to control NetLogo — nothing existed. So I built one.
Instead of manually writing NetLogo code, clicking buttons, and tweaking sliders, you tell your AI assistant what you want in plain English:
"Create a predator-prey model with 100 sheep and 20 wolves. Run it for 500 ticks and show me the population dynamics."
The AI writes the code, runs the simulation, and shows you the results — all through conversation.
6c0560bcc76cOBSERVED · 2026-10-09Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add netlogo-mcp -- None netlogo-mcp==1.0.1
Exposed tools (36)
21 read · 14 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
calibrate | read | Calibrate simulated funnel rates to real-world levels. |
close_model | destructive | Unload the currently loaded model and reset the workspace. |
command | write | Execute a NetLogo command (e.g. |
compare_campaign_variants | read | Paired A/B comparison of a campaign |
create_campaign | write | Create and save a campaign (one audience x one or more ad/email |
create_model | write | Create a new NetLogo model from code and load it. |
download_comses_model | read | Download and safely extract a COMSES model archive. |
export_view | read | Export the current NetLogo view as a PNG image. |
export_world | read | Export the full world state to a CSV file. |
generate_audience | write | Generate and save a synthetic audience from a YAML spec. |
get_agent_sample | read | Return a sample of agents with selected variables as a markdown table. |
get_audience | read | Show a saved audience: spec summary, archetypes, and sample persona |
get_campaign_report | write | Generate the pre-flight report for a campaign that has been run. |
get_comses_model | read | Get detailed metadata for a specific CoMSES model. |
get_patch_data | write | Get patch data as a 2D grid (useful for heatmaps / spatial analysis). |
get_world_state | read | Get the current world state: tick count, agent counts, world dimensions. |
interview_persona | read | Ask a follow-up question to persona(s) — an on-demand focus group. |
list_audiences | read | List saved synthetic audiences. |
list_campaigns | read | List saved campaigns. |
list_experiments | read | List BehaviorSpace experiments saved inside a NetLogo model file. |
list_models | read | List all .nlogo model files in the configured models directory. |
market_info | read | Status of the market-simulation module: LLM config, saved audiences, |
open_comses_model | read | Download (or reuse cache), then open a COMSES model ready to use. |
open_model | read | Open an existing .nlogo model file. |
preview_experiment | write | Show the run plan for a BehaviorSpace experiment WITHOUT executing it. |
read_comses_files | read | Return text contents of source and documentation files from a |
report | read | Evaluate a NetLogo reporter expression and return its value. |
run_campaign | write | Run a saved campaign against its audience and log every reaction. |
run_experiment | write | Run a BehaviorSpace experiment headlessly and return summarized results. |
run_simulation | write | Run the simulation for N ticks and collect reporter data each tick. |
save_model | write | Save NetLogo model code to a .nlogox file in the models directory. |
search_comses | read | Search the CoMSES Net computational model library. |
server_info | read | Return a snapshot of the running NetLogo MCP server |
set_parameter | write | Set a NetLogo global variable / slider / switch value. |
update_model | write | Update the currently loaded model |
watch_simulation | write | Run the simulation SLOWLY so a human can watch it in the GUI window. |
Trust audit
BLOCKgrade F · trust 50/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (11 observation(s))
- Network
- declared (9 observation(s))
- Shell
- declared (7 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
let templateFn = new Function(`return ${template}`)();exec(string: string): RegExpExecArray | null;
overleaf.zip
* console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);* console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);* console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);module.exports={"aac":require("./features/aac"),"abortcontroller":require("./features/abortcontroller"),"ac3-ec3":require("./features/ac3-ec3"),"accelerometer":require("./features/accelerometer"),"add* await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });* await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });* await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });close_model
.pre-commit-config.yaml
.package-lock.json
.babelrc
.nojekyll
componentKeyPath = crypto.createHash("md5");componentKeyPath = crypto.createHash("md5");.createHash("sha1").createHash("sha1")var _configError = require("../../errors/config-error.js");var fs = require("../../gensync-utils/fs.js");var _rewriteStackTrace = require("../../errors/rewrite-stack-trace.js");var _async = require("../../gensync-utils/async.js");var _async = require("../../gensync-utils/async.js");return decodeURIComponent(escape(atob(base64)));
Gates applied: no_behavioural_pass.
6c0560bcc76cfull audit observations/trust-audit/mcp-server/razee4315__netlogo.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-09 | 6c0560bcc76c | BLOCK | F | 50 | first audit |
Questions
What is the NetLogo MCP server?
The first MCP (Model Context Protocol) server for NetLogo, enabling AI assistants like Claude to create, run, and analyze agent-based models through natural conversation.
What tools does NetLogo expose?
36 in total: 21 read-only, 14 that write, and 1 that can delete or overwrite (close_model). Every one is listed on this page with its risk.
Is NetLogo safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (50/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does NetLogo need?
It reads SYNTH_LLM_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does NetLogo run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as yallist at 3.1.1.
How current is this page?
The grade is for one exact copy of the source (6c0560bcc76c), read on 2026-10-09. The repository is watched and re-audited when it changes.