# List Models — Featherless

> List the models available on Featherless (GET /v1/models). Returns model objects each containing an id field to pass as the model prop in Create Chat Completion and Create Text Completion. The catalog is very large (~22k models), so…

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

## Description

List the models available on Featherless (GET /v1/models). Returns model objects each containing an `id` field to pass as the `model` prop in **Create Chat Completion** and **Create Text Completion**. The catalog is very large (~22k models), so results are paged (100 per page by default) and each model is trimmed to key fields (`id`, `name`, `model_class`, `context_length`, `max_completion_tokens`, `available_on_current_plan`); use `q` to search, `page` to page through, or `fields` to change which fields are returned. Example: `q=Qwen` returns Qwen-family models with ids like `Qwen/Qwen3-8B` (pass that id as the `model` prop in a completion). Results are paged (100 per page); increment `page` to fetch more. Because a page size is always sent, the response also includes `pagination` (`current_page`, `total_pages`, `total_items`) and a `total` count. [See the documentation](https://featherless.ai/docs/api-reference-models).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `q` | `string` | No | Optional free-text search query to filter models by name or id. |
| `availableOnCurrentPlan` | `boolean` | No | When true, only return models available on the connected account's current plan (maps to available_on_current_plan). |
| `tags` | `string` | No | Optional comma-separated tags to filter by, e.g. chat,instruct. |
| `page` | `integer` | No | Page number of results to fetch (1-based). |
| `perPage` | `integer` | No | Number of models to return per page. Min 1, max 1000 (maps to per_page). Defaults to 100. Note the API floors values below 100 at 100 per page. |
| `fields` | `string[]` | No | An array of field names to keep on each returned model, e.g. ["id", "is_gated"]. Omit to use the compact default (id, name, model_class, context_length, max_completion_tokens, available_on_current_plan). Available keys also include is_gated and other model metadata. |

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

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: "featherless-list-models",
  arguments: {
    q: "Search Query",
    availableOnCurrentPlan: 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: "featherless-list-models",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    featherless: { authProvisionId: "apn_xxxxxxx" },
    q: "Search Query",
    availableOnCurrentPlan: 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": "featherless-list-models",
    "configured_props": {
      "featherless": { "authProvisionId": "apn_xxxxxxx" },
      "q": "Search Query",
      "availableOnCurrentPlan": true
    }
  }'
```

---

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