# Create Project — Asana

> Creates a new project in an Asana workspace or team. Use this to set up a new initiative, sprint, or work stream. For organization workspaces you must supply a team GID (use List Teams to find it). Returns the new project record including…

- Key: `asana-create-project`
- Type: Action (Write)
- Version: 1.0.0
- App: Asana (`asana`) — https://pipedream.com/apps/asana.md
- This page (HTML): https://pipedream.com/apps/asana/actions/create-project
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/asana/actions/create-project/create-project.mjs

## Description

Creates a new project in an Asana workspace or team. Use this to set up a new initiative, sprint, or work stream. For organization workspaces you must supply a `team` GID (use **List Teams** to find it). Returns the new project record including its `gid`. Example: call with `projectName: 'Q4 Marketing Campaign'`, `workspace: '1200123456789012'`, `team: '1203456789012345'`, `defaultView: 'board'` → returns `{gid: '1204567890123456', name: 'Q4 Marketing Campaign'}`. [See the documentation](https://developers.asana.com/docs/create-a-project)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `workspace` | `string` | Yes | GID of a workspace. Use List Workspaces to find available workspace GIDs. |
| `team` | `string` | Yes | The team that this project is shared with. If the workspace for your project is an organization, you must supply a team to share the project with |
| `projectName` | `string` | Yes | Name of the project. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer. |
| `notes` | `string` | Yes | Free-form textual information associated with the project (ie., its description). |
| `color` | `string` | No | The color associated with the status update |
| `title` | `string` | No | The title of the project status update. |
| `defaultView` | `string` | No | The default view (list, board, calendar, or timeline) of a project |
| `privacySetting` | `string` | No | The privacy setting of the project. Note: Administrators in your organization may restrict the values of privacy_setting. |
| `archived` | `boolean` | No | Archived projects do not show in the UI by default and may be treated differently for queries |
| `dueOn` | `string` | No | The day on which this project is due. This takes a date with format YYYY-MM-DD. |
| `startOn` | `string` | No | The day on which work for this project begins. This takes a date with format YYYY-MM-DD. Due On must be present in the request when setting or unsetting the Start On parameter. Additionally, Start On and Due On cannot be the same date. |
| `followers` | `string[]` | No | GIDs of users to add as followers (e.g. 1198765432109876). Followers are a subset of members who have opted in to receive "tasks added" notifications for a project. Use List Users to find available user GIDs. |
| `htmlNotes` | `string` | No | The notes of the project with formatting as HTML |
| `owner` | `string` | No | The current owner of the project (a user GID, e.g. 1198765432109876). Use List Users to find available user GIDs. |
| `defaultAccessLevel` | `string` | No | The default access for users or teams who join or are added as members to the project |
| `minimumAccessLevelForCustomization` | `string` | No | The minimum access level needed for project members to modify this project's workflow and appearance |
| `minimumAccessLevelForSharing` | `string` | No | The minimum access level needed for project members to share the project with others |

## 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": "asana",
      },
    },
  },
)

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: "asana-create-project",
  arguments: {
    workspace: "Workspace",
    team: "Team",
  },
})
```

**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: "asana-create-project",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    asana: { authProvisionId: "apn_xxxxxxx" },
    workspace: "Workspace",
    team: "Team",
  },
})

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": "asana-create-project",
    "configured_props": {
      "asana": { "authProvisionId": "apn_xxxxxxx" },
      "workspace": "Workspace",
      "team": "Team"
    }
  }'
```

---

- App: https://pipedream.com/apps/asana.md · All apps: https://pipedream.com/apps
