# Search Issues — Linear (API key)

> Searches Linear issues by team, project, assignee, labels, state, or text query. Supports pagination, ordering, and archived issues. Returns array of matching issues. Uses API Key authentication. See Linear docs for additional info here.

- Key: `linear_app-search-issues`
- Type: Action (Read-only)
- Version: 0.2.21
- App: Linear (API key) (`linear_app`) — https://pipedream.com/apps/linear-app.md
- This page (HTML): https://pipedream.com/apps/linear-app/actions/search-issues
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/linear_app/actions/search-issues/search-issues.mjs

## Description

Searches Linear issues by team, project, assignee, labels, state, or text query. Supports pagination, ordering, and archived issues. Returns array of matching issues. Uses API Key authentication. See Linear docs for additional info [here](https://linear.app/developers/graphql).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `teamId` | `string` | Yes | The team associated with the issue. Select one from the list, or pass the team's id as returned by the Linear API — a UUID such as 9d1c3f7e-2b48-4c6a-9f1e-5a7b8c9d0e1f. The short team key shown in issue identifiers such as ENG-123 is rejected. Options are loaded from the connected account. |
| `projectId` | `string` | No | The identifier or key of the project associated with the issue Options are loaded from the connected account. |
| `query` | `string` | No | Search string to look for in issue titles. The query is used to filter issues where the title contains the query text (case insensitive). |
| `stateId` | `string` | No | Filter issues by their workflow state (status). States are scoped to the selected team. Options are loaded from the connected account. |
| `assigneeId` | `string` | No | The user to assign to the issue Options are loaded from the connected account. |
| `issueLabels` | `string[]` | No | The labels in the issue Options are loaded from the connected account. |
| `orderBy` | `string` | No | By which field should the pagination order by. Available options are createdAt (default) and updatedAt. |
| `includeArchived` | `boolean` | No | Should archived resources be included? (default: false) |
| `limit` | `integer` | No | Maximum number of issues to return. If no query is provided, this defaults to 20 to avoid returning too many results. |

## 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": "linear_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: "linear_app-search-issues",
  arguments: {
    teamId: "Team",
    projectId: "Project",
  },
})
```

**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: "linear_app-search-issues",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    linear_app: { authProvisionId: "apn_xxxxxxx" },
    teamId: "Team",
    projectId: "Project",
  },
})

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": "linear_app-search-issues",
    "configured_props": {
      "linear_app": { "authProvisionId": "apn_xxxxxxx" },
      "teamId": "Team",
      "projectId": "Project"
    }
  }'
```

---

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