Draw your stack visually - services, databases, queues, data flows - and ship it as a living spec your whole team can read, while your coding agent reads and updates the same model over MCP.
No account required to try. Saves locally in your browser.
Click Orders service, then open the API and DB tabs: its contract and tables are linked to the same node.
Tip: press M in the editor to switch between real tool logos and minimal symbols.
Other tools give your agent a canvas. Modudraft gives it a typed model of your system: endpoints and sequence lanes belong to their service, tables to their database, all in one file across eight views.
Select a service and the same object shows up with its contracts and sequence lanes, next to the database it writes to. Change it once.
Define POST /orders once. Get every format, generated from the same contract:
openapi: 3.1.0
info:
title: E-commerce checkout API
version: 1.0.0
paths:
/orders:
post:
summary: Place an order
description: >-
Reserves stock and creates a pending order. Retries with the same Idempotency-Key return the
original order.
tags:
- orders
- checkout
- pii
parameters:
- name: Idempotency-Key
in: header
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
customerId:
type: string
items:
type: array
minItems: 1
items:
type: object
properties:
sku:
type: string
quantity:
type: integer
minimum: 1
required:
- sku
- quantity
currency:
type: string
enum:
- USD
- EUR
required:
- customerId
- items
- currency
example:
customerId: string
items:
- sku: string
quantity: 1
currency: USD
responses:
'201':
description: Order created
content:
application/json:
schema:
type: object
properties:
orderId:
type: string
status:
type: string
enum:
- pending
- paid
- failed
- cancelled
total:
type: number
required:
- orderId
- status
- total
example:
orderId: string
status: pending
total: 0
'409':
description: An item is out of stock
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
- message
example:
error: string
message: stringexport interface CreateOrderRequest {
customerId: string;
items: {
sku: string;
quantity: number;
}[];
currency: "USD" | "EUR";
}from __future__ import annotations
from typing import Literal
from pydantic import BaseModel, Field
class CreateOrderRequestItems(BaseModel):
sku: str
quantity: int = Field(ge=1)
class CreateOrderRequest(BaseModel):
customerId: str
items: list[CreateOrderRequestItems] = Field(min_length=1)
currency: Literal["USD", "EUR"]input CreateOrderInputItems {
sku: String!
quantity: Int!
}
enum CreateOrderInputCurrency {
USD
EUR
}
input CreateOrderInput {
customerId: String!
items: [CreateOrderInputItems!]!
currency: CreateOrderInputCurrency!
}syntax = "proto3";
message CreateOrderRequestItems {
string sku = 1;
int32 quantity = 2;
}
message CreateOrderRequest {
string customerId = 1;
repeated CreateOrderRequestItems items = 2;
string currency = 3; // one of: USD, EUR
}name: order.created
summary: An order was placed
contentType: application/json
payload:
type: object
properties:
orderId:
type: string
format: uuid
total:
type: number
occurredAt:
type: string
format: date-time
required:
- orderId
- total
- occurredAt
examples:
- payload:
orderId: 3fa85f64-5717-4562-b3fc-2c963f66afa6
total: 0
occurredAt: 2024-01-01T00:00:00Z Point your agent at a repo and importers for 20+ file formats turn schemas, specs and infrastructure into the model:
A canvas that thinks at the level of systems - not pixels - so you spend time on the design, not the tool.
set_notes.
Connect Claude Code, Cursor or any MCP client. Your agent reads the model before it codes, imports schemas and specs from your repo, adds endpoints with real contracts, and flags source files that changed since the last import. You review; it does the grunt work.
Connect your agent ┌───────────────┐
┌►│ Postgres │
│ │ database (+2) │
│ └───────────────┘
│
│
┌──────────────┐ /orders ┌────────────────┐ orders + outbox │ ┌────────┐
│ API Gateway │───────────┐ │ Orders service │─────────────────────┘ ┌►│ Redis │
│ gateway (+3) │ └►│ compute │────── idempotency ──────┘ │ cache │
└──────────────┘ │ │───────────────────┐ └────────┘
└────────────────┘ order.created │
│
│ ┌───────────────────┐
└►│ order-events │
│ notification (+2) │
└───────────────────┘ {
"mcpServers": {
"modudraft": {
"command": "npx",
"args": [
"-y",
"@modudraft/mcp"
],
"env": {
"MODUDRAFT_API_KEY": "mdft_your_key_here",
"MODUDRAFT_PROJECT_ROOTS": "/Users/you/code/your-repo"
}
}
}
} MODUDRAFT_API_KEY is required. MODUDRAFT_PROJECT_ROOTS is optional: the
source-code folder(s) your agent may read from and write to.
"Finally a diagramming tool that doesn't get in the way. I had our entire auth flow documented in 15 minutes."
"The MCP integration is a game changer. I describe the system in plain English and Claude builds the diagram. Then I clean it up."
"We onboard new engineers with a shared Modudraft canvas. What used to take weeks of reverse-engineering now takes an afternoon."
Start free - no credit card, no time limit. Upgrade when you need persistent cloud storage and team features.