Mmcp.market

Zoo MCP server

by KittyCAD·io.github.KittyCAD/zoo-mcp·v0.28.0

An MCP server that provides access to the Zoo API for various CAD operations and tools.

A85/100grade A
What users say
No reviews yet
Be the first
Safety scan
A85/100

full report

Adoption
Growing

9 stars6.7k downloads/wk

Reviews

Write one

Nobody 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 posts

Read from the package source without running it. The installed server may list more.

  • calculate_bounding_box_cad

    Calculate the bounding box of a CAD file.

  • calculate_bounding_box_kcl

    Calculate the bounding box of a KCL model.

  • calculate_cad_physical_properties

    Calculate physical properties (volume, mass, surface area, center of mass, bounding box) of a CAD file.

  • calculate_center_of_mass

    Calculate the center of mass of a 3d object represented by the input file.

  • calculate_kcl_physical_properties

    Calculate physical properties (volume, mass, surface area, center of mass, bounding box) of a KCL model.

  • calculate_mass

    Calculate the mass of a 3d object represented by the input file.

  • calculate_surface_area

    Calculate the surface area of a 3d object represented by the input file.

  • calculate_volume

    Calculate the volume of a 3d object represented by the input file.

  • center_camera_on_selection

    Point the camera at the current "selection set".

  • convert_cad_file

    Convert a CAD file from one format to another CAD file format.

  • curve_get_end_points

    Get the start and end points of a curve entity.

  • curve_get_type

    Get whether a curve is a line, arc, or NURBS curve.

  • edge_get_length

    Get the length of an edge entity in the current scene units.

  • engine_util_evaluate_path

    Evaluate a serialized KCL path at parameter t.

  • entity_distance

    Get the minimum and maximum distance between two model entities.

  • entity_get_all_child_uuids

    Get all child UUIDs belonging to an entity.

  • entity_get_index

    Get an entity's index within its parent.

  • entity_get_parent_id

    Get the UUID of an entity's parent.

  • entity_get_sketch_paths

    Get the sketch path UUIDs belonging to an entity.

  • exec_kcl_project

    Mock preflight a KCL project, then run it in the session and save its artifact graph.

  • execute_kclwrite action

    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.

  • export_kcl

    Export 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_kcl

    Format 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_info

    Get the position, gradient, normal, and center of a face in a modeling session.

  • get_kcl_doc

    Get the full content of a specific KCL documentation file.

  • get_kcl_sample

    Get the full content of a specific KCL sample including all files.

  • get_modeling_sessions

    List modeling sessions owned by the current MCP server process.

  • get_sketch_constraint_statuswrite action

    Execute 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_entities

    Replace the currently highlighted entities. Does NOT modify the "selection set".

  • import_cad_file

    Import a CAD file into an existing modeling session.

  • lint_and_fix_kcl

    Lint 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_docs

    List all available KCL documentation topics organized by category.

  • list_kcl_samples

    List all available KCL sample projects.

  • list_org_datasets

    List the datasets available to the user's organization.

  • list_org_skills

    List the skills available to the user's organization.

  • mock_execute_kclwrite action

    Mock 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_image

    Save an ImageContent object to disk. This allows a human to review images locally that an LLM has requested.

  • search_kcl_docs

    Search KCL documentation by keyword.

  • search_kcl_samples

    Search KCL samples by keyword.

  • search_org_dataset_semantic

    Semantic-search a dataset for samples relevant to the query.

  • select_entities

    Replace the "selection set" with the given entities.

  • set_selection_filter

    Set which model entity types can be added to the "selection set".

  • snapshot
  • start_modeling_session

    Open an empty modeling websocket for subsequent tools.

  • stop_modeling_session

    Close a persistent modeling websocket session.

  • visualize_sketch

    Render 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

no findings
  • 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
Overall 85/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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

  1. An API key for Zoo, get one here
  2. An environment variable ZOOAPITOKEN set to your API key
export ZOO_API_TOKEN="your_api_key_here"

Installation

  1. Ensure uv has been installed
  1. Create a uv environment
uv venv
  1. Activate your uv environment (Optional)
  1. Install the package from GitHub
uv pip install git+ssh://git@github.com/KittyCAD/mcp.git

Running the Server

The server can be started by using uvx

uvx zoo-mcp

The server can be started locally by using uv and the zoo_mcp module

uv run -m zoo_mcp

The server can also be run with the mcp package

uv run mcp run src/zoo_mcp/server.py

Prebuilt 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_64

The 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.py

The 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.py

The server can also be tested using the MCP Inspector

uv run mcp dev src/zoo_mcp/server.py

For 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.sh

The 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
Add to Cursor

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.

More from KittyCAD