Zoo MCP server
An MCP server that provides access to the Zoo API for various CAD operations and tools.
9 stars6.7k downloads/wk
Reviews
Write oneNobody has reviewed Zoo yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Zoo tools (46, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
calculate_bounding_box_cadCalculate the bounding box of a CAD file.
calculate_bounding_box_kclCalculate the bounding box of a KCL model.
calculate_cad_physical_propertiesCalculate physical properties (volume, mass, surface area, center of mass, bounding box) of a CAD file.
calculate_center_of_massCalculate the center of mass of a 3d object represented by the input file.
calculate_kcl_physical_propertiesCalculate physical properties (volume, mass, surface area, center of mass, bounding box) of a KCL model.
calculate_massCalculate the mass of a 3d object represented by the input file.
calculate_surface_areaCalculate the surface area of a 3d object represented by the input file.
calculate_volumeCalculate the volume of a 3d object represented by the input file.
center_camera_on_selectionPoint the camera at the current "selection set".
convert_cad_fileConvert a CAD file from one format to another CAD file format.
curve_get_end_pointsGet the start and end points of a curve entity.
curve_get_typeGet whether a curve is a line, arc, or NURBS curve.
edge_get_lengthGet the length of an edge entity in the current scene units.
engine_util_evaluate_pathEvaluate a serialized KCL path at parameter t.
entity_distanceGet the minimum and maximum distance between two model entities.
entity_get_all_child_uuidsGet all child UUIDs belonging to an entity.
entity_get_indexGet an entity's index within its parent.
entity_get_parent_idGet the UUID of an entity's parent.
entity_get_sketch_pathsGet the sketch path UUIDs belonging to an entity.
exec_kcl_projectMock preflight a KCL project, then run it in the session and save its artifact graph.
execute_kclwrite actionExecute KCL code given a string of KCL code or a path to a KCL project. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing a main.kcl file.
export_kclExport KCL code to a CAD file. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing a main.kcl file.
format_kclFormat KCL code given a string of KCL code or a path to a KCL project. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing .kcl files.
get_face_infoGet the position, gradient, normal, and center of a face in a modeling session.
get_kcl_docGet the full content of a specific KCL documentation file.
get_kcl_sampleGet the full content of a specific KCL sample including all files.
get_modeling_sessionsList modeling sessions owned by the current MCP server process.
get_sketch_constraint_statuswrite actionExecute KCL and return a report of sketch constraint status. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing a main.kcl file.
highlight_set_entitiesReplace the currently highlighted entities. Does NOT modify the "selection set".
import_cad_fileImport a CAD file into an existing modeling session.
lint_and_fix_kclLint and fix KCL code given a string of KCL code or a path to a KCL project. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing .kcl files.
list_kcl_docsList all available KCL documentation topics organized by category.
list_kcl_samplesList all available KCL sample projects.
list_org_datasetsList the datasets available to the user's organization.
list_org_skillsList the skills available to the user's organization.
mock_execute_kclwrite actionMock execute KCL code given a string of KCL code or a path to a KCL project. Either kcl_code or kcl_path must be provided. If kcl_path is provided, it should point to a .kcl file or a directory containing a main.kcl file.
save_imageSave an ImageContent object to disk. This allows a human to review images locally that an LLM has requested.
search_kcl_docsSearch KCL documentation by keyword.
search_kcl_samplesSearch KCL samples by keyword.
search_org_dataset_semanticSemantic-search a dataset for samples relevant to the query.
select_entitiesReplace the "selection set" with the given entities.
set_selection_filterSet which model entity types can be added to the "selection set".
snapshotstart_modeling_sessionOpen an empty modeling websocket for subsequent tools.
stop_modeling_sessionClose a persistent modeling websocket session.
visualize_sketchRender a named 2D KCL sketch as a solver-debug PNG.
Public scan report
scanner v0.1.5 · 2026-09-19 · same rubric, same numbers if you re-run it
- Code scan10 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 1 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year9/10
What the publisher says
From the Zoo repository's README, as published. We do not edit it. Read it on GitHub
Zoo Model Context Protocol (MCP) Server
An MCP server housing various Zoo built utilities
<!-- mcp-name: io.github.KittyCAD/zoo-mcp -->
Prerequisites
- An API key for Zoo, get one here
- An environment variable ZOOAPITOKEN set to your API key
export ZOO_API_TOKEN="your_api_key_here"Installation
- Ensure uv has been installed
- Create a uv environment
uv venv- Activate your uv environment (Optional)
- Install the package from GitHub
uv pip install git+ssh://git@github.com/KittyCAD/mcp.gitRunning the Server
The server can be started by using uvx
uvx zoo-mcpThe server can be started locally by using uv and the zoo_mcp module
uv run -m zoo_mcpThe server can also be run with the mcp package
uv run mcp run src/zoo_mcp/server.pyPrebuilt binaries
Each GitHub release also attaches standalone executables (built with PyInstaller) for Linux (x8664, arm64), macOS (arm64, x8664), and Windows (x8664) — no Python toolchain required. Download the binary for your platform, set ZOOAPI_TOKEN, and run it directly, e.g.:
ZOO_API_TOKEN="your_api_key_here" ./zoo-mcp-linux-x86_64The binaries are not code-signed, so macOS Gatekeeper and Windows SmartScreen may warn on first run.
Integrations
The server can be used as is by running the server or importing directly into your python code.
from zoo_mcp.server import mcp
mcp.run()Individual tools can be used in your own python code as well. At Zoo we use zoo-mcp like this with ZooKeeper to save on resources. Instead of spinning up one MCP server per agent, each agent in a sense "embeds" the server in their own runtime. It has the additional benefit of preventing shared state.
from mcp.server.mcpserver import MCPServer
from zoo_mcp.zoo_tools import ResultZooExecuteKcl, zoo_execute_kcl
mcp = MCPServer(name="My Example Server")
@mcp.tool()
async def my_execute_kcl(kcl_code: str) -> ResultZooExecuteKcl:
"""
Example tool that uses the zoo_execute_kcl function from zoo_mcp.zoo_tools
"""
return await zoo_execute_kcl(kcl_code=kcl_code)The server can be integrated with Claude desktop using the following command
uv run mcp install src/zoo_mcp/server.pyThe server can also be integrated with Claude Code using the following command
claude mcp add --scope project "Zoo-MCP" uv -- --directory "$PWD"/src/zoo_mcp run server.pyThe server can also be tested using the MCP Inspector
uv run mcp dev src/zoo_mcp/server.pyFor running with codex-cli
codex \
-c 'mcp_servers.zoo.command="uvx"' \
-c 'mcp_servers.zoo.args=["zoo-mcp"]' \
-c mcp_servers.zoo.env.ZOO_API_TOKEN="$ZOO_API_TOKEN"You can also use the helper script included in this repo:
./codex-zoo.shThe script prompts for a request, runs Codex with the Zoo MCP server, and saves a JSONL transcript (including token usage) to codex-run-.jsonl.
Architecture
Tools are defined in src/zoomcp/.py, where they are then imported into src/zoo_mcp/server.py and tied to actual @mcp.tool() decorated functions.
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
claude mcp add zoo-mcp -- uvx zoo_mcp
Zoo: common questions
- Is Zoo MCP server safe?
- Yes, by our scan: it is graded A (85/100). Read the Zoo safety report
- How do I install Zoo?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does Zoo need an API key?
- Yes. The registry entry asks for
ZOO_TOKEN. - Is Zoo maintained?
- The last commit was 2 days ago (2026-09-18). The latest release is v0.28.0.