Skip to main content
Glama
circuitry-dev

Circuitry MCP Server

Official

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CIRCUITRY_ACCESS_KEYNoOverride access key
CIRCUITRY_ESERVER_URLNoOverride EServer URLhttp://localhost:3030

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
circuitry.status

Check connection status to Circuitry.

circuitry.connect

Request connection to Circuitry. Shows permission dialog in Circuitry for user approval. Call this first before using other tools.

circuitry.disconnect

Disconnect from Circuitry. Ends the current MCP session. Call circuitry.connect to reconnect.

workflow.getActive

Get info about the currently visible workflow.

workflow.getStructure

Get simplified structure of all flows in the workflow. Use this to understand what user has drawn.

workflow.resolveFlow

Resolve which flow/nodes the user is referring to based on their message. Uses heuristics to match: selected node content, node names, code/text content keywords. Call this instead of fetching entire workflow for context.

workflow.getNodeSummary

Get simplified details about nodes. Returns name, type, and connections - enough for Claude CLI to understand the diagram.

workflow.getFlowcharts

Get existing flow nodes to modify. Use before updateFlowchart to see what exists.

workflow.layoutNodes

Auto-layout specific nodes using dagre (longest-path algorithm). Positions nodes and optimizes edge handles for clean flowchart appearance.

workflow.undo

Undo the last workflow change. Reverts nodes, edges, and drawing data to previous state. Use this when changes need to be reverted or the user asks to undo.

workflow.redo

Redo the last undone change. Restores nodes, edges, and drawing data to the next state.

workflow.canUndo

Check if undo is available. Call before undo to verify there are changes to revert.

workflow.canRedo

Check if redo is available. Call before redo to verify there are changes to restore.

workflow.getSelectionContext

Get currently selected nodes and what is selected within them (cells in sheets, text in code/text/agent nodes). Use this to understand what the user is referring to when they say "this", "what does this do?", "explain this", etc. Returns empty array if nothing is selected.

nodes.list

List all nodes in the active workflow.

nodes.get

Get a specific node by its ID.

nodes.search

Search workflow nodes by name or content. Returns ALL matches with confidence scores - let AI decide which is most relevant.

Use cases:

  • "the validation node" → searches for nodes with "validation" in name

  • "sheet with customer data" → searches sheet headers and data sample

  • "authentication code" → searches code node contents

Content searched by type:

  • sheet: headers + first 100 rows of data

  • code: first 1000 chars

  • text/agent: full content

  • flow: displayName + content

Large sheets (>1000 rows) are skipped by default to avoid slowness. Use includeLargeSheets: true to include them.

nodes.update

Update a node's data/configuration.

nodes.delete

Delete a node from the workflow.

nodes.createFlowchart

Create a flowchart with nodes and edges on the canvas. Returns nodeIds mapping for subsequent modifications via nodes.updateFlowchart.

Nodes: { id, name, shape?, color? }

  • shape: rounded (default), diamond (decisions), pill (start/end), cylinder (database), parallelogram (I/O)

  • color: CSS name (blue, green, red, amber) or hex. Use red for problems, green for success.

Edges: { from, to, fromHandle?, toHandle?, label? }

  • handles: "left", "right", "top", "bottom"

  • For decisions: fromHandle "right" for Yes/true, "bottom" for No/false

nodes.updateFlowchart

Update an existing flowchart. Pass nodeIds from createFlowchart response to modify nodes/edges.

nodes.insertBetween

Insert node(s) between two connected nodes. Removes existing edge and creates new edges through the inserted nodes.

Use node for single insertion: Source → NewNode → Target Use nodes for chain insertion: Source → A → B → C → Target

nodes.add

Add a new node to the workflow.

nodes.addConnected

Create a new node and connect it to an existing node.

nodes.getByName

Find a node by its display name.

nodes.getByType

Get all nodes of a specific type. Types: start, agent, code, datagrid (Sheet), text, image, chart, condition, loop, then, trigger, action, sticky, flow, web, terminal, scene3d

edges.list

List all edges in the current workflow.

edges.connect

Connect two nodes with an edge.

edges.delete

Delete an edge by ID.

edges.deleteBetween

Delete all edges between two nodes. More intuitive than needing edge IDs.

code.create

Create a code node. Use filePath for bidirectional file sync, OR use name+content for direct creation.

code.createBatch

Create multiple code nodes from file paths. EServer fetches files and sets up sync.

code.createBatchGrouped

Create code nodes organized in named groups with flow node headers. Each group gets a label header (flow node) with its code files arranged below it. Groups are placed side-by-side (horizontal) or stacked (vertical).

IMPORTANT: Provide descriptive names for each file. For Next.js page.tsx files, derive the name from the folder path (e.g., "/app/login/page.tsx" → "Login", "/app/dashboard/settings/page.tsx" → "Dashboard Settings"). Avoid generic names like "page" or "index".

Example: Organize files by folder structure like "Controllers", "Services", "Models".

code.getLineCount

Get the number of lines in a code node. Useful for planning chunked reads of large files.

code.getCode

Get code from a Code node. Supports optional line range for large files (like Claude Code's Read tool).

Without offset/limit: returns full code. With offset/limit: returns specific lines (0-indexed).

Example: offset=100, limit=50 returns lines 100-149.

code.setCode

Update code content in a code node. Use showDiff: true to show inline diff UI for user to review/accept changes. If node is EServer-sourced, will sync to source file.

CRITICAL: Use this for "remove/add/change the X function" requests - EDIT the code content, don't delete the node!

  • "remove the power function" → Get code with code.getCode, then update with code.setCode (function removed)

  • "delete the node" → Use nodes.delete instead (removes entire node)

code.setLines

Replace a range of lines in a code node. More efficient than setCode for partial updates.

The number of lines being replaced equals the length of the 'lines' array. Lines at startLine through startLine + lines.length - 1 will be replaced.

sheet.create

Create a new Sheet (spreadsheet) node with data.

sheet.setData

Replace all data in a Sheet.

sheet.getRowCount

Get the number of rows in a Sheet. Use for planning pagination/chunked reads.

sheet.getColumnCount

Get the number of columns in a Sheet.

sheet.getHeaders

Get the column headers of a Sheet.

sheet.getRows

Get a range of rows from a Sheet (0-indexed, inclusive). Use for large sheets instead of getData.

sheet.getColumn

Get an entire column from a Sheet by index or letter.

sheet.getDataPaginated

Get sheet data with pagination. Best for large sheets (100K+ rows).

sheet.getCell

Get a single cell value from a Sheet.

sheet.setCell

Set a single cell value in a Sheet. Can also set formulas (start with =).

sheet.getCellInfo

Get detailed cell info including formula and computed value.

sheet.insertRow

Insert a row at a specific position.

sheet.deleteRow

Delete a row at a specific position.

sheet.updateRow

Replace an entire row at a specific position.

sheet.insertColumn

Insert a column at a specific position.

sheet.deleteColumn

Delete a column at a specific position.

sheet.setCells

Set multiple cells in one call - efficient for sparse updates. Values starting with "=" are treated as formulas.

sheet.fillRange

Fill a range with a formula pattern - efficient for computed columns/rows. Use {row} for 1-indexed row number (Excel-style), {col} for column letter.

sheet.setCellFormula

Set a formula for a cell. Formulas must start with =.

sheet.getCellFormula

Get the formula string for a cell.

sheet.getFormulas

Get all formulas in a Sheet as a map of cell keys to formula strings.

sheet.listFunctions

List all available formula functions. Sheets support ALL standard Excel/Google Sheets functions including:

  • Math: SUM, AVERAGE, MIN, MAX, ROUND, ABS, SQRT, etc.

  • Lookup: VLOOKUP, HLOOKUP, INDEX, MATCH, LOOKUP

  • Text: CONCAT, LEFT, RIGHT, MID, LEN, TRIM, UPPER, LOWER

  • Logic: IF, AND, OR, NOT, IFERROR, SWITCH

  • Date: TODAY, NOW, DATE, YEAR, MONTH, DAY

  • Stats: COUNT, COUNTA, COUNTIF, SUMIF, AVERAGEIF And 50+ more functions.

text.create

Create a Text (documentation) node with markdown and LaTeX support.

Text nodes are ideal for:

  • Documentation and explanations

  • Mathematical formulas using LaTeX ($...$ for inline, $$...$$ for block)

  • Rich text content with headers, lists, code blocks

  • Plans, discussions, and progress tracking in CodeBook view

In CodeBook: Use codebook.addCell('text') instead for proper cell insertion.

text.getContent

Get markdown content from a Text node.

text.setContent

Update markdown content in a Text node. Supports markdown and LaTeX.

codebook.isOpen

Check if CodeBook (notebook view) is currently active. When CodeBook is open, node creation should use codebook.addCell for proper cell insertion.

codebook.getState

Get CodeBook state including cell order, selected cell, and execution status. Useful for understanding the current notebook context.

codebook.addCell

Add a new cell to CodeBook. Creates a linked node in the workflow and inserts it in the cell order.

Supported cell types:

  • code: Python/JavaScript code with execution

  • text: Markdown documentation with LaTeX support ($...$)

  • agent: AI-powered processing cell

  • datagrid: Spreadsheet/sheet for data

  • chart: Visualization cell

  • image: Image display cell

This is the preferred way to add nodes when CodeBook is open. For workflow canvas, use code.create, text.create, or sheet.create instead.

codebook.open

Open CodeBook view for the current workflow. Switches to notebook-style linear view.

codebook.close

Close CodeBook view and return to workflow canvas.

codebook.runCell

Execute a specific cell in CodeBook.

codebook.runAll

Execute all cells in CodeBook in order.

codebook.getExecutionTarget

Get the current Python execution target for new code cells.

codebook.setExecutionTarget

Set the Python execution target for new code cells.

drawing.getImage

Get the drawing layer as an image for visual interpretation. Use this when user sketches an idea and you need to "see" what they drew. Returns base64 PNG.

drawing.getActiveDocument

Get information about the active drawing document. Use to determine context (notepad/designer/workflow) and whether HTML components exist.

html.create

Create HTML content in Circuitry.

DESIGNER MODE: Use For Designer screens, ALWAYS use layout.createSection to create HTML with proper layout structure. It creates both a layout container AND HTML component together, ensuring correct stacking and preview export.

Only use html.create directly in Designer for adding content to existing layout grid cells.

WORKFLOW context - TWO options (ASK USER if unclear):

  • target: "drawing" - Quick prototypes on canvas drawing layer (default)

  • target: "node" - Web Node with inputs from other nodes

CRITICAL CSS STRUCTURE - Prevents zoom scaling bugs: NEVER put visual styles (background, border-radius, padding, box-shadow) on :host - causes border-radius to scale incorrectly when zooming. Use :host { display: block; } only, and put all visual styles on an inner container element.

MOBILE UI SIZING:

  • Headers: 64px height

  • Bottom nav: 84px height

  • iPhone 15: 393x852

After editing components: Use layout.analyze with autoFix to detect and fix layout issues.

html.update

Update an existing HTML component. Only provided fields will be updated. In Designer mode, operates on currently selected screen - use screen.select first if needed.

html.delete

Delete an HTML component from the drawing layer. In Designer mode, operates on currently selected screen.

html.list

List all HTML components in the current drawing layer. In Designer mode, lists components on currently selected screen.

html.get

Get full details of an HTML component including HTML, CSS, and JS content. In Designer mode, searches currently selected screen - use screen.select first if needed.

html.getByName

Get an HTML component by its display name. Case-insensitive search. Use this to find components like "Login Form" or "Navigation Menu" without needing to know the ID. In Designer mode, searches currently selected screen.

designer.getActive

Check if Designer mode is active and get current document info.

Returns null if not in Designer mode. Use this before calling screen.* or layout.* tools.

designer.getMode

Get the current Designer mode (design, layout, html, or preview).

designer.setMode

Set the Designer mode.

  • design: Freehand drawing, sketching UI mockups

  • layout: Add structural containers (grids, sections)

  • html: Convert drawings to HTML, edit properties

  • preview: Interactive preview, test responsiveness

designer.getDesignContext

Get design context (fonts, colors, patterns, buttons) extracted from all screens.

Use this to understand the user's design style before generating HTML components. The returned context includes:

  • fonts: Font families, sizes, and weights used in text elements

  • colorPalette: Colors categorized by usage (primary/accent, backgrounds, text)

  • buttons: Detected button styles (background, text color, border radius)

  • patterns: Common corner radii, whether shadows/gradients are used

  • theme: Overall theme (light/dark/neutral) based on backgrounds

TIP: When generating HTML with html.create, use this context to match colors, fonts, and button styles to the existing design.

screen.list

List all screens (pages/artboards) in the current Designer document.

screen.get

Get a screen by ID or name.

screen.create

Create a new screen (page/artboard) in the Designer.

Device presets: iPhone 15, iPhone SE, iPad Pro 12", Desktop 1920, etc. Or use "custom" with explicit dimensions.

TIP: After adding components to a screen, run layout.analyze to check for layout issues and get suggested fixes. Screens can be resized taller if content overflows.

screen.update

Update screen properties (name, dimensions, backgroundColor).

screen.delete

Delete a screen from the Designer.

screen.duplicate

Duplicate a screen with all its layouts and HTML components.

screen.select

Select a screen to make it active for editing.

screen.capture

Capture a Designer screen as a PNG image. Use this to verify layouts and catch visual issues like:

  • Clipped content (text/buttons cut off by container)

  • Poor contrast (light text on light background)

  • Overlapping elements

  • Sizing problems

Returns the screen as a base64 PNG image that Claude can analyze visually.

layout.list

List all layout elements on the current or specified screen.

layout.get

Get a layout element by ID or name.

layout.create

Create a layout element on a screen.

Layout Types:

  • Semantic sections: header, footer, hero, sidebar

  • Grid layouts: grid-1col, grid-2col, grid-3col, grid-4col

  • Flex layouts: flex-row, flex-column

  • Containers: card, container

Full-width types (header, footer, hero, grids, container) auto-snap to screen width. Semantic elements auto-position: header at top, footer at bottom.

layout.update

Update a layout element (name, position, dimensions, style).

layout.delete

Delete a layout element.

layout.setStyle

Set style properties on a layout element.

Available style properties:

  • backgroundColor, borderColor, borderWidth, borderRadius, opacity

  • padding: { top, right, bottom, left }

  • gap (spacing between children)

  • justifyContent, alignItems (for flex/grid alignment)

  • widthMode, heightMode ('fixed' or 'flexible')

  • widthPercent, heightPercent (for responsive sizing)

layout.search

Search for layout elements by name or type.

layout.getCell

Get details about a specific cell in a grid layout.

layout.setCellStyle

Set style properties on a specific grid cell.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/circuitry-dev/circuitry-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server