# Create Shape — Miro Developer App

> Creates a shape on a Miro board. See the docs.

- Key: `miro_custom_app-create-shape`
- Type: Action (Write)
- Version: 0.0.3
- App: Miro Developer App (`miro_custom_app`) — https://pipedream.com/apps/miro-custom-app.md
- This page (HTML): https://pipedream.com/apps/miro-custom-app/actions/create-shape
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/miro_custom_app/actions/create-shape/create-shape.mjs

## Description

Creates a shape on a Miro board. [See the docs](https://developers.miro.com/reference/create-shape-item).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `teamId` | `string` | No | The team_id for which you want to retrieve the list of boards. |
| `boardId` | `string` | Yes | The ID of a board Options are loaded from the connected account. |
| `content` | `string` | Yes | The text you want to display on the shape. |
| `shape` | `string` | Yes | Defines the geometric shape of the item when it is rendered on the board. |
| `x` | `integer` | Yes | X-axis coordinate of the location of the item on the board. By default, all items have absolute positioning to the board, not the current viewport. The center point of the board has x: 0 and y: 0 coordinates. |
| `y` | `integer` | Yes | Y-axis coordinate of the location of the item on the board. By default, all items have absolute positioning to the board, not the current viewport. The center point of the board has x: 0 and y: 0 coordinates. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "miro_custom_app",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "miro_custom_app-create-shape",
  arguments: {
    teamId: "Team ID",
    boardId: "Board ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "miro_custom_app-create-shape",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    miro_custom_app: { authProvisionId: "apn_xxxxxxx" },
    teamId: "Team ID",
    boardId: "Board ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "miro_custom_app-create-shape",
    "configured_props": {
      "miro_custom_app": { "authProvisionId": "apn_xxxxxxx" },
      "teamId": "Team ID",
      "boardId": "Board ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/miro-custom-app.md · All apps: https://pipedream.com/apps
