Productboard MCP server for AI agents

Live

OAUTH 2.0

PRODUCT MANAGEMENT

Project Management

Productboard gives your agent product management data: create and search customer feedback notes, link them to features, create and update features and other entities, and look up members and teams.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Productboard
agent · Acme Q3
Run
Which customer notes mention SSO this month?
S
productboard_notes_search
128ms
Product agent
14 notes mention SSO since October 1. 9 of them are already linked to the Enterprise SSO feature.
Sources: Productboard notes, 14 notes
productboard
14 notes
18:29
Message Claude...

Tools your product management agent reaches for on Productboard, scoped per user.

CALL ANY TOOL
28 tools for product management in Productboard: create, update, and search notes and entities such as features and initiatives, link feedback to features, and look up members and teams.
productboard_entities_list
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.
Parameters
Name
Type
Required
Description
archived
boolean
Optional
Filter by archived state. Example: false
name
string
Optional
Only return entities with this name. Example: Dark mode
owner_email
string
Optional
Only return entities owned by the member with this email. Needs the members_pii:read scope. Example: john@doe.com
owner_id
string
Optional
Only return entities owned by this member UUID. Example: 923e4567-e89b-12d3-a456-426614174008
page_cursor
string
Optional
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_id
string
Optional
Only return entities whose parent is this entity UUID, e.g. features of a component. Example: 223e4567-e89b-12d3-a456-426614174001
return_fields
array
Optional
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_id
string
Optional
Only return entities whose metadata.source.recordId matches. Example: A-1
source_system
string
Optional
Only return entities whose metadata.source.system matches. Example: sfdc
status_id
string
Optional
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_name
string
Optional
Only return entities with this status name, e.g. In Progress. Applies to types with a status. Example: In Progress
team_id
string
Optional
Only return entities assigned to this team UUID. Do not combine with team_name. Example: 95db5914-36b0-45e9-8f6d-7f11a950ac1d
team_name
string
Optional
Only return entities assigned to the team with this name. Do not combine with team_id. Example: Product Team
types
array
Optional
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_entities_search
Search entities
productboard_entity_configuration_get
Get entity configuration
productboard_entity_configurations_list
List entity configurations
productboard_entity_create
Create entity
productboard_entity_field_values_list
List entity field values
productboard_entity_get
Get entity
productboard_entity_parent_set
Set entity parent
productboard_entity_relationship_create
Create entity relationship
productboard_entity_relationships_list
List entity relationships
productboard_entity_update
Update entity
productboard_member_get
Get member
productboard_members_list
List members
productboard_members_search
Search members
productboard_note_configuration_get
Get note configuration
productboard_note_configurations_list
List note configurations
productboard_note_create
Create note
productboard_note_customer_set
Set note customer
productboard_note_get
Get note
productboard_note_relationship_create
Create note relationship
productboard_note_relationships_list
List note relationships
productboard_note_update
Update note
productboard_notes_list
List notes
productboard_notes_search
Search notes
productboard_team_get
Get team
productboard_team_members_list
List team members
productboard_teams_list
List teams
productboard_teams_search
Search teams
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Productboard tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["productboard"], toolNames: [
    "productboard_notes_search",
    "productboard_entities_search",
    "productboard_note_relationship_create"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Link every SSO note from this month to the Enterprise SSO feature" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["productboard"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Link every SSO note from this month to the Enterprise SSO feature" }],
  tools,
});

// Execute the tool call with the user's vaulted Productboard OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["productboard"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Link every SSO note from this month to the Enterprise SSO feature" }],
  tools,
});

// Tool call runs with the user's vaulted Productboard OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["productboard"] }, pageSize: 100,
});

const agent = new Agent({
  name: "product_agent",
  model: "gemini-2.5-pro",
  instruction: "Productboard tools scoped to this user",
  tools,
});

await agent.run("Link every SSO note from this month to the Enterprise SSO feature");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Productboard tool. Click to copy, paste into your agent, done.
Feedback
Copy the prompt
Copied
Create a note from this customer call summary for Acme Corp.
Copy the prompt
Copied
Find notes from the last 30 days that mention SSO.
Copy the prompt
Copied
Link the Acme note to the Enterprise SSO feature.
Features
Copy the prompt
Copied
List features under the Billing component.
Copy the prompt
Copied
Create a feature called Usage alerts under the Billing component.
Copy the prompt
Copied
Set the status of the Dark mode feature to In progress.
Team
Copy the prompt
Copied
List the members of the Platform team.
Copy the prompt
Copied
Find the workspace member with the email dana@acme.com.
Copy the prompt
Copied
List the teams in our workspace.
SEE HOW AUTH WORKS
Each user signs in to Productboard once, and Scalekit stores and refreshes their tokens. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Productboard
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Productboard
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Productboard
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Productboard
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other project management and product connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
Test other agents
See the same per-user auth pattern across other project management and product connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Productboard token looks fine in a demo. In production every note and feature update looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Productboard today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Productboard as the user or through a shared service account?
As the user. Each user signs in to Productboard once, and Scalekit stores and refreshes their tokens. Notes and feature changes the agent makes are attributed to that user in your audit trail, not a shared service account.
Where is the Productboard OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Productboard?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the list and search tools without productboard_entity_update or productboard_note_create. No Productboard tool deletes data. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Productboard access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
What is a Productboard entity?
Entities are the items in your product hierarchy, such as features, components, products, initiatives, and objectives. productboard_entity_configurations_list shows which entity types your workspace has, and productboard_entity_create and productboard_entity_update take the type and its fields.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""productboard"": {
""url"": ""https://mcp.scalekit.com/productboard"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.productboard]
url = ""https://mcp.scalekit.com/productboard""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""productboard"": {
""url"": ""https://mcp.scalekit.com/productboard"",
""type"": ""http""
}
}
}