Pen

41 tools. 24 can modify or destroy data without limits.

2 destructive tools with no built-in limits. Policy required.

Last updated:

24 can modify or destroy data
17 read-only
41 tools total

Community server · catalogue entry verified 26/06/2026

How to control Pen ↓

What Pen exposes to your agents

Read (17) Write / Execute (22) Destructive / Financial (2)
Critical Risk

The most dangerous Pen tools

24 of Pen's 41 tools can modify, destroy, or commit something on every call — and an agent calls them with no built-in limits.

How to control Pen

PolicyLayer is an MCP gateway — it sits between your AI agents and Pen, and nothing reaches the server without passing your rules. These are the rules we recommend:

Deny destructive operations
{
  "delete_node": {
    "deny_if": [
      {
        "conditions": [],
        "on_deny": "Blocked by default. Requires approval."
      }
    ]
  }
}

Destructive tools should never be available to autonomous agents without human approval.

Rate limit write operations
{
  "add_page": {
    "limits": [
      {
        "counter": "add_page_per_hour",
        "window": "hour",
        "max": 30,
        "scope": "grant"
      }
    ]
  }
}

Prevents bulk unintended modifications from agents caught in loops.

Cap read operations
{
  "batch_get": {
    "limits": [
      {
        "counter": "batch_get_per_minute",
        "window": "minute",
        "max": 60,
        "scope": "grant"
      }
    ]
  }
}

Controls API costs and prevents retry loops from exhausting upstream rate limits.

  1. Create a free account and register Pen — nothing to install.
  2. Add these rules — paste them, or build them visually. Tune the limits to your setup.
  3. Point your MCP client (Claude, Cursor, anything) at your gateway URL.
ENFORCE POLICY ON PEN →

Instant setup, no code required.

All 41 Pen tools

WRITE 20 tools
Write add_page Add a new page to an .op file. If the document has no pages yet, the existing children are migrated to the fir Write codegen_clean Manually clean up an abandoned codegen plan. Idempotent. Write codegen_plan Submit a code generation plan (CodePlanFromAI). The server validates the plan (rejects on duplicate chunkIds, Write codegen_submit_chunk Submit generated code for one chunk. Returns validation result, progress of all chunks, and the next chunk rea Write copy_node Deep-copy an existing node (with new IDs) and insert the clone under a parent. Optionally apply property overr Write design_content Populate a section with content nodes. Part of the layered design workflow. Write design_skeleton Create a layout skeleton with root frame + section frames. Part of the layered design workflow. Write duplicate_page Duplicate a page (deep-clone with new IDs) and insert the copy right after the original. Write import_svg Import a local SVG file into an .op document as editable PenNodes. Supports path, rect, circle, ellipse, line, Write load_theme_preset Load a .optheme preset file and merge its themes and variables into an .op document. Write move_node Move a node to a new parent (or root level) in an .op file. Optionally specify insertion index. Write rename_page Rename a page in an .op file. Write reorder_page Move a page to a new position (index) in an .op file. Write replace_all_matching_properties Recursively replace all matching property values on the node tree under provided parent IDs. Write replace_node Replace a node with entirely new data. The old node is removed and a new node is inserted at the same position Write save_theme_preset Save the themes and variables from an .op document as a reusable .optheme preset file. Write set_design_md Import a design.md (design system specification) into the document. Accepts raw markdown or autoExtract=true t Write set_themes Create or update theme axes and their variants in an .op file. Each theme axis (e.g. Write set_variables Add or update design variables in an .op file. By default merges with existing variables. Write update_node Update properties of an existing node. Only provided properties are shallow-merged; unmentioned properties rem
READ 17 tools
Read batch_get Search and read nodes from the document. ALWAYS call this first before update_node or delete_node to find the Read codegen_assemble Retrieve all chunk results in topological order for final assembly. Terminal operation — clears plan cache aft Read debug_logs_tail Read the tail of the Nitro server log (~/.openpencil/logs/server-YYYY-MM-DD.log) Read debug_screenshot Capture a PNG screenshot of the live canvas via the renderer. Read export_design_md Export the design.md as markdown text. If no design.md exists, auto-extracts from document content. Read find_empty_space Find empty canvas space in a given direction for placing new content. Read get_design_md Get the design.md (design system specification) from the document. Returns the parsed spec and raw markdown. I Read get_design_prompt Get design knowledge prompt. Use Read get_selection Get the currently selected nodes on the live canvas. Returns the full node data for each selected element. Read get_style_guide Returns a style guide for design inspiration based on tags or name. Read get_style_guide_tags Returns all available style guide tags for filtering. Read get_variables Get all design variables and themes defined in an .op file. Read list_theme_presets List all .optheme preset files in a directory. Read open_document Open an existing .op file or connect to the live Electron canvas. Returns document metadata, context summary, Read read_nodes Read nodes from the document with depth control. Omit nodeIds to get all top-level children of the page. Use d Read search_all_unique_properties Recursively search for all unique property values on the node tree under provided parent IDs. Read snapshot_layout Get the hierarchical bounding box layout tree of the document.

Related servers

Other MCP servers with similar tools — same risk classification, starter policies for each.

Questions about Pen

Can an AI agent delete data through the Pen MCP server? +

Yes. The Pen server exposes 2 destructive tools including delete_node, remove_page. These permanently remove resources with no undo. PolicyLayer blocks destructive tools by default so they never reach the upstream server.

How do I prevent bulk modifications through Pen? +

The Pen server has 20 write tools including add_page, codegen_clean, codegen_plan. Set a rate limit in your policy -- for example, 10 calls per hour prevents an agent from making more than 10 modifications per hour. PolicyLayer enforces this at the gateway, before calls reach Pen.

How many tools does the Pen MCP server expose? +

41 tools across 4 categories: Destructive, Execute, Read, Write. 17 are read-only. 24 can modify, create, or delete data.

How do I enforce a policy on Pen? +

Register the Pen MCP server in PolicyLayer, apply the suggested rules above (adjust the limits to your use case), and point your AI client at the PolicyLayer proxy URL instead of the server directly. Your agents keep the same tools; PolicyLayer evaluates every call against policy before it executes. Nothing to install, live in minutes.

Enforce policy on every Pen tool call.

Deterministic rules across all 41 Pen tools. Per-identity grants. Full audit log. Live in minutes. Nothing to install.

Instant setup, no code required.

41 Pen tools catalogued and risk-classified — across an index of 43,000+ MCP servers.

// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.