Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Productboard

Scalekit connector
Open markdown

The Productboard connector lets your AI agent act in each user's Productboard account. Each user signs in to Productboard once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 28 tools.

Tools
28
What they doRead · write · destructive
16 · 12 · 016 read12 write0 destructive
Users sign in with
OAuth app
Your own Productboard app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Productboard connection

    In AgentKit > Connections, create a Productboard connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Productboard connections use your own OAuth app. Register one with Productboard and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Productboard connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'productboard'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Productboard:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'productboard_entities_list',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • productboard_entities_listList Productboard entities such as features, components, products, initiatives, objectives, key results, releases, companies and users, filtered by type, name, owner, status, team, parent, archived state or source record.Read-only

    List Entities

    List Productboard entities such as features, components, products, initiatives, objectives, key results, releases, companies and users, filtered by type, name, owner, status, team, parent, archived state or source record. Returns a page of entities with id, type, fields and links, plus links.next whose pageCursor fetches the next page. Use productboard_entities_list to browse with simple filters. Use productboard_entities_search for many ids, date ranges or custom-field filters. Use productboard_entity_get for one entity.

    Inputs

    archivedboolean
    Filter by archived state. Example: false
    namestring
    Only return entities with this name. Example: Dark mode
    owner_emailstring
    Only return entities owned by the member with this email. Needs the members_pii:read scope. Example: john@doe.com
    owner_idstring
    Only return entities owned by this member UUID. Example: 923e4567-e89b-12d3-a456-426614174008
    page_cursorstring
    Cursor for the next page of entities. Copy the pageCursor value from links.next of the previous response. Leave empty for the first page. Example: eyJvZmZzZXQiOjEwMH0
    parent_idstring
    Only return entities whose parent is this entity UUID, e.g. features of a component. Example: 223e4567-e89b-12d3-a456-426614174001
    return_fieldsarray
    Limit which entity fields are returned. Pass field ids such as name, owner, tags or a custom field UUID; pass ["all"] to also include empty fields. Leave empty to return all non-empty fields. Do not combine "all" with specific fields. Example: ["name", "owner"]
    source_record_idstring
    Only return entities whose metadata.source.recordId matches. Example: A-1
    source_systemstring
    Only return entities whose metadata.source.system matches. Example: sfdc
    status_idstring
    Only return entities with this status UUID. Applies to types with a status, such as feature and initiative. Example: 447eb060-2a7e-4d1e-9d59-322a11e0fdb0
    status_namestring
    Only return entities with this status name, e.g. In Progress. Applies to types with a status. Example: In Progress
    team_idstring
    Only return entities assigned to this team UUID. Do not combine with team_name. Example: 95db5914-36b0-45e9-8f6d-7f11a950ac1d
    team_namestring
    Only return entities assigned to the team with this name. Do not combine with team_id. Example: Product Team
    typesarray
    Only return entities of these types: product, component, feature, subfeature, initiative, objective, keyResult, release, releaseGroup, company or user (the set depends on the workspace; productboard_entity_configurations_list lists it). Example: ["feature"]
  • productboard_entity_configuration_getGet the configuration of one Productboard entity type.Read-only

    Get Entity Configuration

    Get the configuration of one Productboard entity type. Returns the type's fields (ids, value types, required flags, allowed values), supported patch operations, available list filters and relationship rules. Use productboard_entity_configuration_get before creating, updating or filtering entities of that type. Use productboard_entity_configurations_list to see all types.

    Inputs

    typestringrequired
    Entity type to describe: product, component, feature, subfeature, initiative, objective, keyResult, release, releaseGroup, company or user (the set depends on the workspace; productboard_entity_configurations_list lists it). Example: feature
  • productboard_entity_configurations_listList the entity types available in the Productboard workspace and their configuration.Read-only

    List Entity Configurations

    List the entity types available in the Productboard workspace and their configuration. Returns each type (for example feature, initiative, company) with its fields, required fields, allowed values, supported patch operations, filters and relationship rules. Use productboard_entity_configurations_list to discover which types exist. Use productboard_entity_configuration_get for one type.

    Inputs

    typesarray
    Only return these entity types: product, component, feature, subfeature, initiative, objective, keyResult, release, releaseGroup, company or user (the set depends on the workspace; productboard_entity_configurations_list lists it). Leave empty for all. Example: ["feature", "initiative"]
  • productboard_entity_field_values_listList the allowed values of a select, tag or status field on Productboard entities.Read-only

    List Field Values

    List the allowed values of a select, tag or status field on Productboard entities. Returns a page of options with id, name and color (statuses also carry their entity type), plus links.next; a query returns up to 20 best tag matches without paging. Use productboard_entity_field_values_list to find option ids or names before filtering or setting a select, tag or status field.

    Inputs

    field_idstringrequired
    Field id: the API name of a default field such as status or tags, or a custom field UUID from productboard_entity_configuration_get. Example: status
    assigned_entity_typesarray
    Only return values used by these entity types; useful for status, where each type has its own set. Example: ["feature"]
    page_cursorstring
    Cursor for the next page of values. Copy the pageCursor value from links.next of the previous response. Leave empty for the first page. Example: eyJvZmZzZXQiOjEwMH0
    querystring
    Search tag values by name (case- and accent-insensitive, typo tolerant). Returns up to 20 matches and ignores page_cursor. Example: launch
  • productboard_entity_getGet one Productboard entity (feature, component, product, initiative, objective, key result, release, company, user and so on) by its UUID.Read-only

    Get Entity

    Get one Productboard entity (feature, component, product, initiative, objective, key result, release, company, user and so on) by its UUID. Returns the entity's id, type, fields (name, description, status, owner, timeframe, teams, tags and custom fields), relationships and links, including the app URL. Use productboard_entity_get when you have the entity id. Use productboard_entities_list or productboard_entities_search to find entities.

    Inputs

    entity_idstringrequired
    UUID of the entity to retrieve. Get it from productboard_entities_list or productboard_entities_search. Example: 123e4567-e89b-12d3-a456-426614174000
    return_fieldsarray
    Limit which entity fields are returned. Pass field ids such as name, owner, tags or a custom field UUID; pass ["all"] to also include empty fields. Leave empty to return all non-empty fields. Do not combine "all" with specific fields. Example: ["name", "owner"]
  • productboard_entity_relationships_listList the relationships of one Productboard entity: its parent, children, linked entities and dependencies.Read-only

    List Entity Relationships

    List the relationships of one Productboard entity: its parent, children, linked entities and dependencies. Returns a page of relationships, each with type and target (id, type, links), plus links.next for the next page. Use productboard_entity_relationships_list to walk the product hierarchy or dependencies. Use productboard_entity_relationship_create to add one.

    Inputs

    entity_idstringrequired
    UUID of the entity to inspect. Get it from productboard_entities_list or productboard_entities_search. Example: 123e4567-e89b-12d3-a456-426614174000
    page_cursorstring
    Cursor for the next page of relationships. Copy the pageCursor value from links.next of the previous response. Leave empty for the first page. Example: eyJvZmZzZXQiOjEwMH0
    relationship_typestring
    Only return relationships of this type: parent, child, link, isBlockedBy or isBlocking. Example: childone of parentchildlinkisBlockedByisBlocking
    target_idstring
    Only return the relationship with this target entity UUID. Example: 223e4567-e89b-12d3-a456-426614174001
    target_typestring
    Only return relationships whose target has this entity type, e.g. feature. Example: feature
  • productboard_member_getGet one Productboard workspace member by UUID.Read-only

    Get Member

    Get one Productboard workspace member by UUID. Returns the member's id, name, username, email and role; name and email read [redacted] without the members_pii:read scope. Use productboard_member_get when you have the member id. Use productboard_members_list or productboard_members_search to find members.

    Inputs

    member_idstringrequired
    UUID of the member. Get it from productboard_members_list or from an owner field. Example: 923e4567-e89b-12d3-a456-426614174008
  • productboard_members_listList members of the Productboard workspace (the people on your team who use Productboard), oldest first, optionally filtered by name or email text and role.Read-only

    List Members

    List members of the Productboard workspace (the people on your team who use Productboard), oldest first, optionally filtered by name or email text and role. Returns a page of members with id, name, username, email and role, plus links.next; name and email read [redacted] without the members_pii:read scope. Use productboard_members_list to browse or find member ids. Use productboard_members_search to look up many members by id or email. Use productboard_member_get for one member.

    Inputs

    include_disabledboolean
    Set true to include disabled members. Defaults to false. Example: true
    include_invitation_pendingboolean
    Set true to include members whose invitation is still pending. Defaults to false. Example: true
    page_cursorstring
    Cursor for the next page of members. Copy the pageCursor value from links.next of the previous response. Leave empty for the first page. Example: eyJvZmZzZXQiOjEwMH0
    querystring
    Text matched against member name or email (partial, case-insensitive). Example: jane
    rolesarray
    Only return members with one of these roles: admin, maker, viewer, contributor. Example: ["admin", "maker"]