# List Tasks — Harvest

> List tasks in the Harvest account, automatically following pagination up to 200 tasks. Use this to discover task IDs for Create Task Assignment, Create Timesheet Entry, and other tools that accept a Task ID. Example: call with…

- Key: `harvest-list-tasks`
- Type: Action (Read-only)
- Version: 0.0.1
- App: Harvest (`harvest`) — https://pipedream.com/apps/harvest.md
- This page (HTML): https://pipedream.com/apps/harvest/actions/list-tasks
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/harvest/actions/list-tasks/list-tasks.mjs

## Description

List tasks in the Harvest account, automatically following pagination up to 200 tasks. Use this to discover task IDs for **Create Task Assignment**, **Create Timesheet Entry**, and other tools that accept a Task ID. Example: call with isActive=true to find the ID for the "Fence Maintenance" task before assigning it to a project. [See the documentation](https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/#list-all-tasks).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `accountId` | `string` | Yes | Your Harvest account ID, e.g. 1234567. Run List Account ID Options to find it. |
| `isActive` | `boolean` | No | Only return active or inactive tasks. |
| `updatedSince` | `string` | No | Only return records updated since this UTC datetime, e.g. 2019-06-25T15:30:00Z. |

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

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: "harvest-list-tasks",
  arguments: {
    accountId: "Account ID",
    isActive: true,
  },
})
```

**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: "harvest-list-tasks",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    harvest: { authProvisionId: "apn_xxxxxxx" },
    accountId: "Account ID",
    isActive: true,
  },
})

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": "harvest-list-tasks",
    "configured_props": {
      "harvest": { "authProvisionId": "apn_xxxxxxx" },
      "accountId": "Account ID",
      "isActive": true
    }
  }'
```

---

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