productplan-mcp-server
ProductPlan MCP 서버
AI를 사용하여 로드맵과 대화하세요. Claude, Cursor 또는 기타 AI 어시스턴트와 자연스러운 대화를 통해 질문하고, 아이디어를 생성하고, OKR 진행 상황을 확인하며, 출시 일정을 관리할 수 있습니다.
무엇을 할 수 있나요?
ProductPlan 인터페이스를 클릭하며 돌아다니는 대신, 다음과 같이 물어보세요:
"Q1 로드맵에는 무엇이 있나요?"
"일정이 지연된 모든 목표를 보여줘"
"모바일 앱 개선을 위한 새로운 아이디어를 생성해줘"
"이번 달에 예정된 출시 항목은 무엇인가요?"
"'customer-request' 태그가 지정된 모든 아이디어를 나열해줘"
AI가 실제 ProductPlan 데이터를 가져와 몇 초 만에 응답합니다.
Related MCP server: plane-mcp-server
누구를 위한 것인가요?
제품 관리자(PM): 로드맵 데이터에 더 빠르게 접근하고 싶은 분
팀 리드: 컨텍스트 전환 없이 빠른 상태 업데이트가 필요한 분
AI 어시스턴트(Claude, Cursor 등) 사용자: ProductPlan을 워크플로우에 통합하고 싶은 분
코딩은 필요 없습니다. 파일을 복사하고 몇 가지 설정을 붙여넣기만 하면 됩니다.
빠른 시작 (5분)
1단계: ProductPlan API 토큰 받기
ProductPlan에 로그인합니다.
Settings → API로 이동합니다 (또는 이 링크를 직접 방문하세요).
API 토큰을 복사합니다.
2단계: 앱 다운로드
Releases 페이지로 이동하여 컴퓨터에 맞는 파일을 다운로드하세요:
컴퓨터 | 다운로드 항목 |
Mac (M1, M2, M3, M4) |
|
Mac (Intel) |
|
Windows |
|
Linux |
|
Mac/Linux의 경우, 터미널을 열고 다음 두 명령어를 실행하세요 (파일 이름을 다운로드한 것으로 바꾸세요):
chmod +x ~/Downloads/productplan-darwin-arm64
sudo mv ~/Downloads/productplan-darwin-arm64 /usr/local/bin/productplan비밀번호를 묻는 메시지가 나타납니다. 이는 정상입니다.
Windows의 경우:
바이너리를 위한 폴더를 생성합니다 (없는 경우):
mkdir C:\Tools다운로드한
.exe파일을 해당 폴더로 이동하고 이름을 변경합니다:move %USERPROFILE%\Downloads\productplan-windows-amd64.exe C:\Tools\productplan.exeAI 어시스턴트 설정(3단계 참조)에서 전체 경로
C:\Tools\productplan.exe를 사용하세요.
참고: PATH에 추가하는 과정은 건너뛰어도 됩니다. 설정에서 전체 파일 경로를 사용하기만 하면 됩니다.
3단계: AI 어시스턴트에 연결
사용 중인 도구를 선택하세요:
설정 파일을 찾습니다:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
텍스트 편집기로 열고 다음을 추가합니다 (
your-token을 실제 API 토큰으로 바꾸세요):
Mac/Linux:
{
"mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Claude Desktop을 재시작합니다.
설정 파일에 추가하세요:
Mac/Linux:
~/.claude.jsonWindows:
%USERPROFILE%\.claude.json
Mac/Linux:
{
"mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Cursor를 엽니다.
Settings → MCP Servers로 이동합니다.
다음 설정을 추가합니다:
Mac/Linux:
{
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}Windows:
{
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}Windows 사용자: 경로에 이중 백슬래시(
\\)를 사용하세요. 백슬래시는 JSON에서 이스케이프 문자이므로 필수입니다.
Cline 확장 프로그램을 설치합니다.
VS Code 설정(JSON)을 열고 다음을 추가합니다:
Mac/Linux:
{
"cline.mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"cline.mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Continue 확장 프로그램을 설치합니다.
설정 파일에 추가합니다:
Mac/Linux:
~/.continue/config.jsonWindows:
%USERPROFILE%\.continue\config.json
Mac/Linux:
{
"mcpServers": [
{
"name": "productplan",
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
]
}Windows:
{
"mcpServers": [
{
"name": "productplan",
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
]
}n8n 인스턴스에 환경 변수를 설정합니다:
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true워크플로우에 MCP Client 노드를 추가합니다.
구성:
Command:
Mac/Linux:
/usr/local/bin/productplanWindows:
C:\Tools\productplan.exe
Environment Variables:
PRODUCTPLAN_API_TOKEN=your-token
AI Agent 노드에 연결합니다.
워크플로우 예시: Slack Trigger → AI Agent (with MCP Client) → Slack Response
4단계: 질문 시작하기
AI 어시스턴트를 열고 다음을 시도해보세요:
"내 ProductPlan 로드맵 나열해줘"
"로드맵 [이름]에는 어떤 바(bar)들이 있나요?"
"우리 OKR을 보여줘"
"발굴(Discovery) 단계에 있는 아이디어는 무엇인가요?"
실제 활용 사례
아침 스탠드업 준비
"지난주 우리 제품 로드맵에서 변경된 사항을 요약해줘"
이해관계자 업데이트
"모든 Q1 목표와 진행 상황을 나열해줘"
아이디어 분류
"우선순위가 설정되지 않은 'enterprise' 태그가 붙은 모든 아이디어를 보여줘"
출시 조정
"1월 출시를 위해 아직 완료되지 않은 작업은 무엇인가요?"
빠른 조회
"'Mobile App v2' 바는 언제 시작될 예정인가요?"
어떤 ProductPlan 데이터에 접근할 수 있나요?
기능 | 보기 | 생성 | 수정 | 삭제 |
로드맵 | 예 | - | - | - |
로드맵 댓글 | 예 | - | - | - |
바 (로드맵 항목) | 예 | 예 | 예 | 예 |
바 댓글 | 예 | - | - | - |
바 연결 | 예 | 예 | - | 예 |
바 링크 | 예 | 예 | - | 예 |
레인 (카테고리) | 예 | 예 | 예 | 예 |
범례 (바 색상) | 예 | - | - | - |
마일스톤 | 예 | 예 | 예 | 예 |
아이디어 (발굴) | 예 | 예 | 예 | - |
아이디어 고객 | 예 | - | - | - |
아이디어 태그 | 예 | - | - | - |
기회 | 예 | 예 | 예 | - |
아이디어 양식 | 예 | - | - | - |
목표 (OKR) | 예 | 예 | 예 | 예 |
핵심 결과 | 예 | 예 | 예 | 예 |
출시 | 예 | 예 | 예 | 예 |
출시 섹션 | 예 | 예 | 예 | 예 |
출시 작업 | 예 | 예 | 예 | 예 |
사용자 | 예 | - | - | - |
팀 | 예 | - | - | - |
작동 원리
┌─────────────────┐ spawns ┌─────────────────┐ API calls ┌─────────────────┐
│ AI Assistant │ ───────────────── │ MCP Server │ ─────────────────▶ │ ProductPlan │
│ (Claude, Cursor)│ ◀───────────────▶ │ (this binary) │ ◀───────────────── │ API │
└─────────────────┘ stdin/stdout └─────────────────┘ JSON data └─────────────────┘
your computer your computer cloud왜 컴퓨터에서 실행되어야 하나요?
MCP(Model Context Protocol)는 하위 프로세스 모델을 통해 작동합니다. AI 어시스턴트는 원격 서버에 연결하는 것이 아니라, 바이너리를 로컬 프로세스로 생성하고 표준 입출력(stdin/stdout)을 통해 통신합니다. 이 아키텍처의 의미는 다음과 같습니다:
바이너리가 로컬에 존재해야 합니다. AI 어시스턴트가 이를 자식 프로세스로 실행하기 때문입니다.
API 토큰은 컴퓨터에 머무릅니다. 타사 서버를 거치지 않습니다.
실시간 동기식 통신. AI와 MCP 서버 간의 네트워크 지연이 없습니다.
오프라인 작동. 캐시된 데이터에 대해 작동합니다 (단, ProductPlan API 호출은 인터넷이 필요합니다).
"Q1 로드맵에는 무엇이 있나요?"라고 물으면 다음과 같은 일이 일어납니다:
AI 어시스턴트가 ProductPlan 데이터가 필요함을 인식합니다.
MCP 서버 프로세스에 구조화된 요청을 보냅니다.
바이너리가 이를 ProductPlan API 호출로 변환합니다.
ProductPlan이 JSON 데이터를 반환합니다.
바이너리가 결과를 형식화하여 AI에게 반환합니다.
AI가 자연어로 답변을 제시합니다.
에이전트 스킬
AI 어시스턴트가 ProductPlan 도구를 효과적으로 사용하는 방법을 가르치는 사전 구축된 워크플로우 가이드입니다. 각 스킬은 특정 페르소나에 맞춘 워크플로우를 제공합니다.
스킬 | 대상 | 초점 |
일반 | 핵심 패턴 및 도구 참조 | |
제품 관리자 | 전체 툴킷: 로드맵, OKR, 아이디어, 출시 | |
경영진 | 포트폴리오 상태, 교차 로드맵 뷰 | |
영업 및 CS | 고객용 로드맵 타임라인 |
공유 원칙
모든 스킬은 다음 출력 규칙을 따릅니다:
원시 JSON 금지 - 읽기 쉬운 텍스트와 표로 응답을 형식화합니다.
사람이 읽을 수 있는 날짜 - "2025-03-15" 대신 "2025년 3월" 또는 "2025년 1분기"를 사용합니다.
긴 목록 요약 - 50개의 항목으로 압도하지 말고, 확장할지 제안합니다.
페르소나별 변형:
PM은 후속 조치를 위해
bar_id를 포함합니다.경영진은 요약 정보를 우선시하고 구현 세부 사항을 숨깁니다.
고객용은 내부 ID, 레인 이름, OKR을 완전히 생략합니다.
스킬을 사용하려면, SKILL.md 파일을 Claude Code 스킬 디렉토리에 복사하세요:
# Copy a skill (example: PM skill)
cp skills/productplan-pm/SKILL.md ~/.claude/skills/productplan-pm.md또는 프롬프트에서 스킬을 직접 참조하세요:
"productplan-pm 워크플로우를 사용하여 Q1 로드맵을 보여줘"
문제 해결
"Command not found" 또는 "spawn ENOENT"
AI 어시스턴트가 바이너리를 찾을 수 없는 경우입니다. 다음을 확인하세요:
Mac/Linux: 파일이
/usr/local/bin/productplan에 없거나chmod +x를 실행하는 것을 잊은 경우.Windows: 설정의 경로가
.exe를 저장한 위치와 일치하지 않는 경우.
해결: 설정의 경로에 바이너리가 존재하는지 확인하세요. ls -la /usr/local/bin/productplan (Mac/Linux)을 실행하거나 C:\Tools\productplan.exe가 존재하는지 확인하세요.
Windows 경로 문제
Windows에서의 흔한 실수:
잘못된 예 | 올바른 예 |
|
|
|
|
|
|
| 경로에 |
Windows는 경로에 백슬래시(\)를 사용하지만, JSON은 백슬래시를 이스케이프 문자로 취급합니다. 설정 파일에서는 이를 두 번(\\) 입력해야 합니다.
"Invalid API token"
ProductPlan Settings → API에서 토큰을 다시 확인하세요. 토큰은 만료되거나 재생성될 수 있습니다. 공백 없이 전체 토큰을 복사했는지 확인하세요.
"No roadmaps found"
API 토큰은 ProductPlan에서 볼 수 있는 권한이 있는 데이터에만 접근합니다. 계정에 찾으려는 로드맵에 대한 접근 권한이 있는지 확인하세요.
AI 어시스턴트가 ProductPlan 도구를 보지 못함
MCP 서버는 설정이 변경될 때가 아니라 AI 어시스턴트가 시작될 때 로드됩니다. 설정 파일을 편집한 후에는 애플리케이션을 완전히 종료하고 다시 시작하세요. Mac에서는 Cmd+Q를 사용하세요 (창만 닫는 것이 아님).
"Permission denied" (Mac/Linux)
바이너리에 실행 권한이 필요합니다. 다음을 실행하세요:
chmod +x /usr/local/bin/productplan명령줄 (선택 사항)
AI 어시스턴트 없이 터미널에서 직접 이 도구를 사용할 수도 있습니다:
# First, set your token
export PRODUCTPLAN_API_TOKEN="your-token"
# Then run commands
productplan status # Check connection
productplan roadmaps # List all roadmaps
productplan bars 12345 # List bars in roadmap #12345
productplan objectives # List all OKRs
productplan ideas # List all ideas
productplan opportunities # List all opportunities
productplan launches # List all launches배경 정보
MCP란 무엇인가요?
Model Context Protocol (MCP)는 AI 어시스턴트가 외부 도구에 연결할 수 있도록 하는 개방형 표준입니다. Anthropic
Available Tools
50 toolsbulk_create_barsA
Create many bars on one roadmap in one call.
USE WHEN: "Add these 20 features to the roadmap", "Import this list as bars", "Create a bar per epic" For a single bar, use manage_bar instead. Each item needs name and a lane (lane name or lane_id), from the item or from set. Put shared values in set (e.g. set:{"lane":"Backend","legend":"Exploring"}). Up to 100 items. All items are validated against the roadmap before anything is written; one invalid item means nothing is sent. dry_run:true returns the exact POST payloads without writing. Parking follows manage_bar: a bar given starts_on and ends_on and no parked lands on the timeline (parked:false); an undated bar is parked by ProductPlan's default; a nested bar inherits its container's parked state. Writes run 4 at a time under the client's rate limiter. Returns per-item {index, bar_id, name, ok, error} and a summary like "Created 18 of 20 bars; 2 failed". The result is an error only when no bar was created. On a partial failure, retry only the failed items: resending the whole call would duplicate the bars that were created. FAILS WHEN: roadmap_id missing, items empty or over 100, an item without name or lane, a name not on the roadmap.
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Fields applied to every item unless the item sets them itself | |
| items | Yes | Bars to create: [{name, lane or lane_id, ...fields}]. Fields are the same as manage_bar create. | |
| dry_run | No | True to validate and return the payloads without writing | |
| roadmap_id | Yes | Roadmap to create the bars on |
bulk_delete_barsADestructive
Permanently delete many bars in one call, verifying each delete.
USE WHEN: "Delete these bars", "Remove all the test bars I just made", "Clean up the parked duplicates" For a single bar, use manage_bar action=delete instead. Requires confirm:true. dry_run:true looks each bar up and returns its name without deleting, so the list can be checked first. Up to 100 bar_ids, each once. Each delete is verified by reading the bar back and expecting 404; a bar that still exists after a successful-looking delete is reported as failed. Deletes run 4 at a time under the client's rate limiter. Returns per-item {index, bar_id, ok, error} and a summary like "Deleted 9 of 10 bars; 1 failed". The result is an error only when no bar was deleted. FAILS WHEN: confirm is not true (and dry_run is not set), bar_ids empty, over 100, malformed, or repeated. WARNING: delete is permanent and cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| bar_ids | Yes | Bar IDs to delete | |
| confirm | No | Must be true to delete | |
| dry_run | No | True to look the bars up and list them without deleting |
bulk_update_barsADestructive
Update many bars in one call: recolor, move lanes, retag, reschedule, set progress.
USE WHEN: "Color all these bars Committed", "Move these 12 bars to the Backend lane", "Set percent_done on every Q3 bar" For a single bar, use manage_bar instead. Put values shared by every bar in set (e.g. set:{"legend":"Committed"}) and per-bar values in items; an item's own fields override set. Up to 100 items; each bar_id may appear once. Every item is validated before anything is written: legend, lane, custom field labels, and dropdown values are checked against each bar's roadmap (one roadmap fetch per distinct roadmap; pass roadmap_id to skip looking up each bar's roadmap). One invalid item means nothing is sent, and the error lists every problem with the valid options. dry_run:true returns the exact PATCH payload per bar without writing. Writes run 4 at a time under the client's rate limiter. Returns per-item {index, bar_id, ok, error} and a summary like "Updated 28 of 30 bars; 2 failed". The result is an error only when no bar was updated. A partial failure is a normal result whose summary counts the failures; retry only the failed items. FAILS WHEN: items empty or over 100, a bar_id missing or repeated, a name not on the roadmap, legend_id or effort passed (see manage_bar).
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Fields applied to every item unless the item sets them itself, e.g. {"legend":"Committed"}. Same fields as items | |
| items | Yes | Bars to update: [{bar_id, ...fields}]. Fields are the same as manage_bar update: name, lane, lane_id, legend, clear_legend, starts_on, ends_on, description, percent_done, is_container, container_bar_id, parked, strategic_value, notes, tags, custom_text_fields, custom_dropdown_fields. Optional per-item roadmap_id. | |
| dry_run | No | True to validate and return the payloads without writing | |
| roadmap_id | No | Roadmap all bars are on; skips one bar lookup per item when names need validating |
check_statusARead-only
Check ProductPlan API status and authentication.
USE WHEN: "Is ProductPlan connected?", "Check API" For MCP server internals (cache stats, rate limits), use health_check instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_barARead-only
Get bar details including description, links, custom fields.
USE WHEN: "Tell me about this feature", "Bar details" Returns bar name, dates, description, links, custom fields, percent_done, and lane info. FAILS WHEN: bar_id not found (get valid IDs from get_roadmap_bars).
| Name | Required | Description | Default |
|---|---|---|---|
| bar_id | Yes | Bar ID from get_roadmap_bars |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_bar_childrenARead-only
Get child bars nested under a parent bar.
USE WHEN: "Show sub-tasks", "Child items", "Break down this feature" FAILS WHEN: bar_id not found. Returns empty list if bar has no children (not all bars are containers).
| Name | Required | Description | Default |
|---|---|---|---|
| bar_id | Yes | Parent bar ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_bar_commentsARead-only
Get comments on a bar.
USE WHEN: "Show comments", "What's the feedback on this bar?" For roadmap-level comments, use get_roadmap_comments instead. FAILS WHEN: bar_id not found.
| Name | Required | Description | Default |
|---|---|---|---|
| bar_id | Yes | Bar ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_bar_connectionsARead-only
Get bar dependencies (what blocks what).
USE WHEN: "What depends on this?", "Show dependencies" FAILS WHEN: bar_id not found. Returns empty list if bar has no connections.
| Name | Required | Description | Default |
|---|---|---|---|
| bar_id | Yes | Bar ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_bar_linksARead-only
Get external links on a bar (Jira, docs, designs).
USE WHEN: "What's linked?", "Show Jira tickets" FAILS WHEN: bar_id not found. Returns empty list if bar has no external links.
| Name | Required | Description | Default |
|---|---|---|---|
| bar_id | Yes | Bar ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_ideaARead-only
Get idea details including description and metadata.
USE WHEN: "Tell me about this idea", "Full request details" FAILS WHEN: idea_id not found (get valid IDs from list_ideas).
| Name | Required | Description | Default |
|---|---|---|---|
| idea_id | Yes | Idea ID from list_ideas |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_idea_formARead-only
Get idea form details with fields.
USE WHEN: "Show form fields", "What does this form collect?" FAILS WHEN: form_id not found (get valid IDs from list_idea_forms).
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | Form ID from list_idea_forms |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_key_resultARead-only
Get key result details.
USE WHEN: "Tell me about this KR", "KR progress" FAILS WHEN: objective_id or key_result_id not found (use list_key_results to get valid KR IDs).
| Name | Required | Description | Default |
|---|---|---|---|
| objective_id | Yes | Parent objective ID | |
| key_result_id | Yes | Key result ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_launchARead-only
Get launch details with checklist.
USE WHEN: "Tell me about this launch", "Launch readiness" FAILS WHEN: launch_id not found (get valid IDs from list_launches).
| Name | Required | Description | Default |
|---|---|---|---|
| launch_id | Yes | Launch ID from list_launches |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_launch_sectionARead-only
Get a specific checklist section by ID.
USE WHEN: "Show one specific checklist section by ID" For all sections, use get_launch_sections. FAILS WHEN: launch_id or section_id not found.
| Name | Required | Description | Default |
|---|---|---|---|
| launch_id | Yes | Launch ID | |
| section_id | Yes | Section ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_launch_sectionsARead-only
Get checklist sections for a launch.
USE WHEN: "Show sections", "Checklist categories" For one specific section, use get_launch_section. FAILS WHEN: launch_id not found.
| Name | Required | Description | Default |
|---|---|---|---|
| launch_id | Yes | Launch ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_launch_taskARead-only
Get a specific launch task by ID.
USE WHEN: "Show one specific task by ID", "Check task assignment or status" For all tasks, use get_launch_tasks. FAILS WHEN: launch_id or task_id not found.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID | |
| launch_id | Yes | Launch ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_launch_tasksARead-only
Get all tasks for a launch.
USE WHEN: "Show tasks", "What needs to be done?" For one specific task, use get_launch_task. FAILS WHEN: launch_id not found.
| Name | Required | Description | Default |
|---|---|---|---|
| launch_id | Yes | Launch ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_objectiveARead-only
Get objective details with key results.
USE WHEN: "Tell me about objective X", "OKR progress" FAILS WHEN: objective_id not found (get valid IDs from list_objectives).
| Name | Required | Description | Default |
|---|---|---|---|
| objective_id | Yes | Objective ID from list_objectives |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_opportunityARead-only
Get opportunity details with linked ideas.
USE WHEN: "Tell me about this opportunity" FAILS WHEN: opportunity_id not found (get valid IDs from list_opportunities).
| Name | Required | Description | Default |
|---|---|---|---|
| opportunity_id | Yes | Opportunity ID from list_opportunities |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmapARead-only
Get roadmap settings and metadata.
USE WHEN: "Tell me about roadmap X", "Roadmap settings", "What custom fields does this roadmap have?" For all data in one call (bars, lanes, milestones), use get_roadmap_complete. Returns roadmap name, date range, sharing settings, and metadata, including the vocabulary bar writes must use: legends (names), lanes (names), custom_text_fields [{label}], and custom_dropdown_fields [{label, allowed_values}]. manage_bar and the bulk_*_bars tools validate against exactly these. FAILS WHEN: roadmap_id not found (get valid IDs from list_roadmaps first).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID from list_roadmaps |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_barsARead-only
Get bars (features/items) on a roadmap, optionally filtered.
USE WHEN: "What's on the roadmap?", "Show planned features", "What's starting in Q2?", "Bars in the Mobile lane tagged urgent" Server-side filters (sent to ProductPlan): name_contains, starts_after/starts_before, ends_after/ends_before (YYYY-MM-DD, inclusive), is_container, sort ("starts_on asc"). Client-side filters (applied here to every fetched bar, before the 50-item cap): lane (name or ID), legend (name), tag. Exact, case-insensitive. Returns bars with ID, name, starts_on/ends_on, lane_name and lane_id, legend, tags, percent_done, is_container, and parked. For a bar's description and custom fields, use get_bar. FAILS WHEN: roadmap_id not found (use list_roadmaps); a date is not YYYY-MM-DD; sort names a field outside the allowed list (the error lists them). Says "No bars matched the filters" when filters exclude everything.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only bars carrying this tag (client-side, case-insensitive) | |
| lane | No | Only bars in this lane, by name or lane ID (client-side, case-insensitive) | |
| sort | No | Sort as "field" or "field asc|desc" (server-side). Fields: id, name, starts_on, ends_on, is_container, created_at, updated_at | |
| legend | No | Only bars with this legend name (client-side, case-insensitive; names from get_roadmap_legends) | |
| ends_after | No | Only bars ending on or after this date, YYYY-MM-DD (server-side) | |
| roadmap_id | Yes | Roadmap ID | |
| ends_before | No | Only bars ending on or before this date, YYYY-MM-DD (server-side) | |
| is_container | No | true for container bars only, false to exclude containers (server-side) | |
| starts_after | No | Only bars starting on or after this date, YYYY-MM-DD (server-side) | |
| name_contains | No | Only bars whose name contains this text (case-insensitive, server-side) | |
| starts_before | No | Only bars starting on or before this date, YYYY-MM-DD (server-side) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_commentsARead-only
Get roadmap-level comments (not bar comments).
USE WHEN: "Show roadmap comments", "Roadmap discussion" For bar-level comments, use get_bar_comments instead. Returns array of comments with author, body, and timestamp. FAILS WHEN: roadmap_id not found (use list_roadmaps).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_completeARead-only
Get complete roadmap in one call. Details, bars, lanes, milestones combined.
USE WHEN: "Full roadmap overview", "Summarize roadmap X" For settings/metadata only, use get_roadmap. Returns combined roadmap details, bars, lanes, and milestones in one response. FAILS WHEN: roadmap_id not found (use list_roadmaps).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_lanesARead-only
Get lanes (categories) on a roadmap. Lanes organize bars into rows.
USE WHEN: "What lanes are on the roadmap?", "Show categories" Returns array of lanes with ID, name, description, and position (the API exposes no lane color). FAILS WHEN: roadmap_id not found (use list_roadmaps).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_legendsARead-only
Get the legend names (bar colors) for a roadmap.
USE WHEN: "What colors are available?", "Show the legend", "Which legend can I color bars with?"
Returns an array of legend names. The ProductPlan API exposes legends by name only: there is no legend ID or hex color to return. Pass a name as legend on manage_bar, bulk_update_bars, or bulk_create_bars to color a bar.
For custom field definitions (labels, dropdown allowed_values), use get_roadmap instead. To find bars by legend, use get_roadmap_bars with legend.
FAILS WHEN: roadmap_id not found (use list_roadmaps).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
get_roadmap_milestonesARead-only
Get milestones (key dates) on a roadmap.
USE WHEN: "What are the key dates?", "Show milestones" Returns array of milestones with ID, title, and date. FAILS WHEN: roadmap_id not found (use list_roadmaps).
| Name | Required | Description | Default |
|---|---|---|---|
| roadmap_id | Yes | Roadmap ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
health_checkARead-only
Check MCP server health and cache stats.
USE WHEN: "Server status", "Rate limits", "Diagnose issues" For API connectivity only, use check_status instead. FAILS WHEN: deep=true and API is unreachable. Basic health (deep=false) always succeeds if server is running.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | Also verify API connectivity (~500ms) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_all_customersARead-only
List all customers across ideas. Returns customer names and linked idea counts.
USE WHEN: "Who are our customers?", "All feedback sources" FAILS WHEN: API token invalid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_all_tagsARead-only
List all tags used across ideas. Returns tag names and usage counts across ideas.
USE WHEN: "What tags exist?", "Show categories" FAILS WHEN: API token invalid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_idea_formsARead-only
List idea submission forms.
USE WHEN: "Show feedback forms", "What forms exist?" Returns array of forms with ID and name. FAILS WHEN: API token invalid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_ideasARead-only
List all ideas in discovery pipeline. START HERE for ideas.
USE WHEN: "Show customer feedback", "What ideas do we have?", "Ideas mentioning SSO" Optional server-side filters: name_contains (case-insensitive), channel (exact); sort ("name asc"). Returns ideas with ID, name, channel, and opportunities_count. FAILS WHEN: API token invalid; sort names a field outside the allowed list (the error lists them). Returns empty list if no ideas exist.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort as "field" or "field asc|desc" (server-side). Fields: id, name, description, channel, customer, opportunities_count, source_name, source_email, location_status | |
| channel | No | Only ideas from this channel, exact match (server-side) | |
| name_contains | No | Only ideas whose name contains this text (case-insensitive, server-side) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_key_resultsARead-only
List key results for an objective.
USE WHEN: "What are the KRs?", "Show metrics" Returns array of key results with ID, name, target_value, and current_value. FAILS WHEN: objective_id not found (use list_objectives).
| Name | Required | Description | Default |
|---|---|---|---|
| objective_id | Yes | Objective ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_launchesARead-only
List all launches. START HERE for launches.
USE WHEN: "Show launches", "Release schedule", "Launches this quarter" Optional server-side filters: name_contains (case-insensitive), status (exact), launch_after/launch_before (YYYY-MM-DD, inclusive); sort ("launch_date asc"). Returns array of launches with ID, name, launch_date, status, and progress. FAILS WHEN: API token invalid; a date is not YYYY-MM-DD; sort names a field outside the allowed list (the error lists them). Returns empty list if no launches exist.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort as "field" or "field asc|desc" (server-side). Fields: id, name, description, launch_date, status, user_id | |
| status | No | Only launches with this status, exact match (server-side) | |
| launch_after | No | Only launches on or after this date, YYYY-MM-DD (server-side) | |
| launch_before | No | Only launches on or before this date, YYYY-MM-DD (server-side) | |
| name_contains | No | Only launches whose name contains this text (case-insensitive, server-side) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_objectivesARead-only
List all OKR objectives. START HERE for OKRs.
USE WHEN: "Show OKRs", "What are our objectives?" Returns array of objectives with ID, name, risk_status, start_date, end_date, and key_results_count. FAILS WHEN: API token invalid. Returns empty list if no objectives exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_opportunitiesARead-only
List all opportunities. START HERE for discovery.
USE WHEN: "Show opportunities", "Discovery pipeline", "Opportunities about onboarding" Optional server-side filters: problem_contains (case-insensitive), workflow_status (exact); sort ("ideas_count desc"). Returns array of opportunities with ID, problem_statement, workflow_status, and linked idea count. FAILS WHEN: API token invalid; sort names a field outside the allowed list (the error lists them). Returns empty list if no opportunities exist.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort as "field" or "field asc|desc" (server-side). Fields: id, problem_statement, workflow_status, location_status, description, user_id, ideas_count, bars_count | |
| workflow_status | No | Only opportunities in this workflow status, exact match (server-side) | |
| problem_contains | No | Only opportunities whose problem statement contains this text (case-insensitive, server-side) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_roadmapsARead-only
List all roadmaps. START HERE to get roadmap IDs.
USE WHEN: "Show my roadmaps", "What roadmaps do I have?", "Find the Mobile roadmap" Optional server-side filters: name_contains (case-insensitive); sort ("name asc", "updated_at desc"). Returns roadmaps with ID, name, and updated_at. FAILS WHEN: API token invalid or expired (check PRODUCTPLAN_API_TOKEN env var); sort names a field outside the allowed list (the error lists them).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort as "field" or "field asc|desc" (server-side). Fields: id, name, is_version, created_at, updated_at | |
| name_contains | No | Only roadmaps whose name contains this text (case-insensitive, server-side) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_teamsARead-only
List all teams in account.
USE WHEN: "What teams exist?", "Team structure" For individual user details, use list_users instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
list_usersARead-only
List all users in account.
USE WHEN: "Who has access?", "Team members" Returns array of users with ID, name, email, and role. Use user IDs from this tool when assigning launch tasks via manage_launch_task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The ProductPlan payload (object or array) returned by the API, passed through verbatim |
| summary | Yes | Human-readable summary of the result (e.g. "Found 3 roadmaps") |
manage_barADestructive
Create, update, or delete a bar on a roadmap.
USE WHEN: "Add feature", "Update dates", "Delete item", "Change color", "Nest this bar under that one" For many bars at once (e.g. "color these 30 bars"), use bulk_update_bars, bulk_create_bars, or bulk_delete_bars instead. Actions: create (roadmap_id + name + lane or lane_id), update (bar_id + any fields), delete (bar_id) Color a bar with legend (a legend NAME from get_roadmap_legends); legend:"" or clear_legend:true removes the color. Omitted fields are never sent, so an update only touches what you pass. New bars are parked (off the timeline) by ProductPlan's default. When you give starts_on and ends_on on create and leave parked unset, the bar defaults to parked:false so it lands on the timeline; a nested bar inherits its container's parked state. Names (legend, lane, custom field labels, dropdown values) are checked against the roadmap before writing, matched case-insensitively, and sent in canonical spelling. Returns: create gives the new bar's id plus the bar read back; update gives the exact fields sent. FAILS WHEN: create without roadmap_id, name, or a lane; update/delete without bar_id; a legend, lane, or custom field name is not on the roadmap (the error lists the valid ones); container_bar_id on a bar without both dates, or a parked state that differs from the container's. legend_id and effort are rejected with an explanation (legend_id would wipe the bar's color). A bar cannot be un-nested via the API once container_bar_id is set. WARNING: delete is permanent and cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| lane | No | Lane NAME (see get_roadmap lanes). Use this or lane_id | |
| name | No | Bar name | |
| tags | No | Tag strings; REPLACES the bar's tag list. [] clears it | |
| notes | No | Additional notes | |
| action | Yes | create, update, or delete | |
| bar_id | No | Bar ID (for update/delete) | |
| effort | No | DEPRECATED and rejected: not a ProductPlan bar field (the API ignores it). Use a custom field | |
| legend | No | Legend NAME that colors the bar (from get_roadmap_legends). Empty string clears the color | |
| parked | No | True parks the bar (off the timeline, kept on the roadmap). Must match the container's when nested | |
| ends_on | No | End date YYYY-MM-DD | |
| lane_id | No | Lane ID from get_roadmap_lanes. Use this or lane | |
| container | No | DEPRECATED alias for is_container | |
| legend_id | No | DEPRECATED and rejected: the API reads legend_id as 'clear the color'. Use legend (name) | |
| parent_id | No | DEPRECATED alias for container_bar_id | |
| starts_on | No | Start date YYYY-MM-DD | |
| roadmap_id | No | Roadmap ID (required for create; optional on update to skip looking up the bar's roadmap) | |
| description | No | Description (markdown) | |
| clear_legend | No | True to remove the bar's color (same as legend:"") | |
| is_container | No | True to make the bar a container for child bars | |
| percent_done | No | Progress 0-100 | |
| strategic_value | No | Free-text strategic importance note | |
| container_bar_id | No | Numeric ID of the container bar to nest under. Requires starts_on and ends_on on the bar; cannot be removed once set | |
| custom_text_fields | No | [{label,value}] using labels from get_roadmap custom_text_fields | |
| custom_dropdown_fields | No | [{label,value}]; value must be one of the field's allowed_values from get_roadmap |
manage_bar_connectionADestructive
Create or delete dependency between bars.
USE WHEN: "Link features", "Add dependency", "Remove dependency" Actions: create (target_bar_id), delete (connection_id) FAILS WHEN: create without target_bar_id, delete without connection_id (get IDs from get_bar_connections).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create or delete | |
| bar_id | Yes | Source bar ID | |
| connection_id | No | Connection ID (for delete) | |
| target_bar_id | No | Target bar (for create) |
manage_bar_linkADestructive
Create or delete external link on a bar.
USE WHEN: "Link Jira ticket", "Add design doc", "Remove link" Actions: create (url), delete (link_id) FAILS WHEN: create without url, delete without link_id (get IDs from get_bar_links). Note: update not available via API; delete and re-create instead.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to link | |
| name | No | Display name | |
| action | Yes | create or delete | |
| bar_id | Yes | Bar ID | |
| link_id | No | Link ID (for delete) |
manage_ideaADestructive
Create or update an idea. Note: delete not available via API.
USE WHEN: "Add idea", "Update idea status" Actions: create (title), update (idea_id) Returns the created/updated idea object. FAILS WHEN: create without title, update without idea_id. Note: delete is not available via the ProductPlan API; archive ideas by updating status instead.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Idea title | |
| action | Yes | create or update | |
| status | No | Idea workflow status | |
| idea_id | No | Idea ID (for update) | |
| description | No | Description (markdown) |
manage_key_resultADestructive
Create, update, or delete a key result.
USE WHEN: "Add KR", "Update progress", "Delete KR" Actions: create (name+target), update (key_result_id), delete (key_result_id) Returns the created/updated key result, or confirmation on delete. FAILS WHEN: create without name or target_value, update/delete without key_result_id (use list_key_results).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Key result name | |
| action | Yes | create, update, or delete | |
| objective_id | Yes | Parent objective ID | |
| target_value | No | Target (100, 50%, $1M) | |
| current_value | No | Current progress | |
| key_result_id | No | Key result ID (for update/delete) |
manage_laneADestructive
Create, update, or delete a lane on a roadmap.
USE WHEN: "Add Backend lane", "Rename Mobile lane", "Move lane to the top", "Delete lane" Actions: create (name; optional description, position), update (lane_id plus any of name, description, position), delete (lane_id) Returns the created/updated lane object, or confirmation on delete. FAILS WHEN: create without name, update/delete without lane_id (get IDs from get_roadmap_lanes), color passed (lanes have no settable color in the API). WARNING: delete removes the lane and unassigns all bars in it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Lane name | |
| color | No | DEPRECATED and rejected: lanes have no color field in the ProductPlan API, so it was never applied | |
| action | Yes | create, update, or delete | |
| lane_id | No | Lane ID (for update/delete) | |
| position | No | Position of the lane in the roadmap | |
| roadmap_id | Yes | Roadmap ID | |
| description | No | What the lane represents |
manage_launchADestructive
Create, update, or delete a launch.
USE WHEN: "Create launch", "Update date", "Delete launch" Actions: create (name+date), update (launch_id), delete (launch_id) Returns the created/updated launch object, or confirmation on delete. FAILS WHEN: create without name or date, update/delete without launch_id, date not in YYYY-MM-DD format. WARNING: delete removes the launch and all its sections and tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD | |
| name | No | Launch name | |
| action | Yes | create, update, or delete | |
| launch_id | No | Launch ID (for update/delete) | |
| description | No | Description |
manage_launch_sectionADestructive
Create, update, or delete a checklist section.
USE WHEN: "Add Marketing section", "Rename section", "Delete section" Actions: create (name), update (section_id), delete (section_id) Returns the created/updated section object, or confirmation on delete. FAILS WHEN: create without name, update/delete without section_id (get IDs from get_launch_sections). WARNING: delete removes the section and all tasks in it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Section name | |
| action | Yes | create, update, or delete | |
| launch_id | Yes | Launch ID | |
| section_id | No | Section ID (for update/delete) |
manage_launch_taskADestructive
Create, update, or delete a launch task.
USE WHEN: "Add task", "Mark complete", "Assign task", "Delete task" Actions: create (name+section_id), update (task_id), delete (task_id) Returns the created/updated task object, or confirmation on delete. FAILS WHEN: create without name or section_id, update/delete without task_id (get IDs from get_launch_tasks). Use list_users to get valid assigned_user_id values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Task name | |
| action | Yes | create, update, or delete | |
| status | No | Task status | |
| task_id | No | Task ID (for update/delete) | |
| due_date | No | YYYY-MM-DD | |
| launch_id | Yes | Launch ID | |
| section_id | No | Section ID (for create) | |
| description | No | Task description | |
| assigned_user_id | No | User ID to assign (get from list_users) |
manage_milestoneADestructive
Create, update, or delete a milestone on a roadmap.
USE WHEN: "Add launch milestone", "Move demo date", "Delete milestone" Actions: create (title+date), update (milestone_id), delete (milestone_id) Returns the created/updated milestone object, or confirmation on delete. FAILS WHEN: create without title or date, update/delete without milestone_id (get IDs from get_roadmap_milestones), date not in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD format | |
| title | No | Milestone title | |
| action | Yes | create, update, or delete | |
| roadmap_id | Yes | Roadmap ID | |
| milestone_id | No | Milestone ID (for update/delete) |
manage_objectiveADestructive
Create, update, or delete an objective.
USE WHEN: "Add Q1 objective", "Update objective", "Delete OKR" Actions: create (name), update (objective_id), delete (objective_id) Returns the created/updated objective, or confirmation on delete. FAILS WHEN: create without name, update/delete without objective_id. WARNING: delete also removes all key results under this objective.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Objective name | |
| action | Yes | create, update, or delete | |
| time_frame | No | Q1 2024, H1 2024, 2024 | |
| description | No | Description | |
| objective_id | No | Objective ID (for update/delete) |
manage_opportunityADestructive
Create or update an opportunity. Note: delete not available via API.
USE WHEN: "Create opportunity", "Update problem" Actions: create (problem_statement), update (opportunity_id) Returns the created/updated opportunity object. FAILS WHEN: create without problem_statement, update without opportunity_id (get IDs from list_opportunities). Note: delete is not available via the ProductPlan API; archive opportunities by updating workflow_status instead.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create or update | |
| description | No | Description | |
| opportunity_id | No | Opportunity ID (for update) | |
| workflow_status | No | Opportunity workflow status | |
| problem_statement | No | Problem statement (title) |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
40 tool updates
v6.0.0- Added
bulk_create_bars - Added
bulk_delete_bars - Added
bulk_update_bars - Changed
check_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_bar1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_bar_children1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_bar_comments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_bar_connections1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_bar_links1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_idea1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_idea_form1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_key_result1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_launch1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_launch_section1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_launch_sections1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_launch_task1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_launch_tasks1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_objective1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_opportunity1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_bars11 fields changed- added
Input schema / properties / ends_afterAdded value: +{ + "description": "Only bars ending on or after this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / ends_beforeAdded value: +{ + "description": "Only bars ending on or before this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / is_containerAdded value: +{ + "description": "true for container bars only, false to exclude containers (server-side)", + "type": "boolean" +} - added
Input schema / properties / laneAdded value: +{ + "description": "Only bars in this lane, by name or lane ID (client-side, case-insensitive)", + "type": "string" +} - added
Input schema / properties / legendAdded value: +{ + "description": "Only bars with this legend name (client-side, case-insensitive; names from get_roadmap_legends)", + "type": "string" +} - added
Input schema / properties / name_containsAdded value: +{ + "description": "Only bars whose name contains this text (case-insensitive, server-side)", + "type": "string" +} - added
Input schema / properties / sortAdded value: +{ + "description": "Sort as \"field\" or \"field asc|desc\" (server-side). Fields: id, name, starts_on, ends_on, is_container, created_at, updated_at", + "examples": [ + "name asc" + ], + "pattern": "^(id|name|starts_on|ends_on|is_container|created_at|updated_at)( (asc|desc))?$", + "type": "string" +} - added
Input schema / properties / starts_afterAdded value: +{ + "description": "Only bars starting on or after this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / starts_beforeAdded value: +{ + "description": "Only bars starting on or before this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / tagAdded value: +{ + "description": "Only bars carrying this tag (client-side, case-insensitive)", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_comments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_complete1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_lanes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_legends1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
get_roadmap_milestones1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
health_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_all_customers1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_all_tags1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_idea_forms1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_ideas2 fields changed- added
Input schema / propertiesAdded value: +{ + "channel": { + "description": "Only ideas from this channel, exact match (server-side)", + "type": "string" + }, + "name_contains": { + "description": "Only ideas whose name contains this text (case-insensitive, server-side)", + "type": "string" + }, + "sort": { + "description": "Sort as \"field\" or \"field asc|desc\" (server-side). Fields: id, name, description, channel, customer, opportunities_count, source_name, source_email, location_status", + "examples": [ + "name asc" + ], + "pattern": "^(id|name|description|channel|customer|opportunities_count|source_name|source_email|location_status)( (asc|desc))?$", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_key_results1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_launches2 fields changed- added
Input schema / propertiesAdded value: +{ + "launch_after": { + "description": "Only launches on or after this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "launch_before": { + "description": "Only launches on or before this date, YYYY-MM-DD (server-side)", + "examples": [ + "2026-01-01" + ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" + }, + "name_contains": { + "description": "Only launches whose name contains this text (case-insensitive, server-side)", + "type": "string" + }, + "sort": { + "description": "Sort as \"field\" or \"field asc|desc\" (server-side). Fields: id, name, description, launch_date, status, user_id", + "examples": [ + "name asc" + ], + "pattern": "^(id|name|description|launch_date|status|user_id)( (asc|desc))?$", + "type": "string" + }, + "status": { + "description": "Only launches with this status, exact match (server-side)", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_objectives1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_opportunities2 fields changed- added
Input schema / propertiesAdded value: +{ + "problem_contains": { + "description": "Only opportunities whose problem statement contains this text (case-insensitive, server-side)", + "type": "string" + }, + "sort": { + "description": "Sort as \"field\" or \"field asc|desc\" (server-side). Fields: id, problem_statement, workflow_status, location_status, description, user_id, ideas_count, bars_count", + "examples": [ + "problem_statement asc" + ], + "pattern": "^(id|problem_statement|workflow_status|location_status|description|user_id|ideas_count|bars_count)( (asc|desc))?$", + "type": "string" + }, + "workflow_status": { + "description": "Only opportunities in this workflow status, exact match (server-side)", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_roadmaps2 fields changed- added
Input schema / propertiesAdded value: +{ + "name_contains": { + "description": "Only roadmaps whose name contains this text (case-insensitive, server-side)", + "type": "string" + }, + "sort": { + "description": "Sort as \"field\" or \"field asc|desc\" (server-side). Fields: id, name, is_version, created_at, updated_at", + "examples": [ + "name asc" + ], + "pattern": "^(id|name|is_version|created_at|updated_at)( (asc|desc))?$", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_teams1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
list_users1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The ProductPlan payload (object or array) returned by the API, passed through verbatim", + "type": "object" + }, + "summary": { + "description": "Human-readable summary of the result (e.g. \"Found 3 roadmaps\")", + "type": "string" + } + }, + "required": [ + "summary", + "data" + ], + "type": "object" +}
- Changed
manage_bar17 fields changed- added
Input schema / properties / clear_legendAdded value: +{ + "description": "True to remove the bar's color (same as legend:\"\")", + "type": "boolean" +} - changed
Input schema / properties / container / descriptionPrevious value: -"Is container for children"New value: +"DEPRECATED alias for is_container" - added
Input schema / properties / container_bar_idAdded value: +{ + "description": "Numeric ID of the container bar to nest under. Requires starts_on and ends_on on the bar; cannot be removed once set", + "type": "string" +} - changed
Input schema / properties / custom_dropdown_fields / descriptionPrevious value: -"[{name,value}] custom dropdowns"New value: +"[{label,value}]; value must be one of the field's allowed_values from get_roadmap" - changed
Input schema / properties / custom_dropdown_fields / items / descriptionPrevious value: -"Custom dropdown field with name and value"New value: +"{\"label\": \"<field label>\", \"value\": \"<allowed value>\"}" - changed
Input schema / properties / custom_text_fields / descriptionPrevious value: -"[{name,value}] custom text fields"New value: +"[{label,value}] using labels from get_roadmap custom_text_fields" - changed
Input schema / properties / custom_text_fields / items / descriptionPrevious value: -"Custom text field with name and value"New value: +"{\"label\": \"<field label>\", \"value\": \"<text>\"}" - changed
Input schema / properties / effort / descriptionPrevious value: -"Effort estimate (unitless integer, scale per team)"New value: +"DEPRECATED and rejected: not a ProductPlan bar field (the API ignores it). Use a custom field" - added
Input schema / properties / is_containerAdded value: +{ + "description": "True to make the bar a container for child bars", + "type": "boolean" +} - added
Input schema / properties / laneAdded value: +{ + "description": "Lane NAME (see get_roadmap lanes). Use this or lane_id", + "type": "string" +} - changed
Input schema / properties / lane_id / descriptionPrevious value: -"Lane ID (for create; update to move)"New value: +"Lane ID from get_roadmap_lanes. Use this or lane" - added
Input schema / properties / legendAdded value: +{ + "description": "Legend NAME that colors the bar (from get_roadmap_legends). Empty string clears the color", + "type": "string" +} - changed
Input schema / properties / legend_id / descriptionPrevious value: -"Color from get_roadmap_legends"New value: +"DEPRECATED and rejected: the API reads legend_id as 'clear the color'. Use legend (name)" - changed
Input schema / properties / parent_id / descriptionPrevious value: -"Parent bar ID for nesting"New value: +"DEPRECATED alias for container_bar_id" - changed
Input schema / properties / parked / descriptionPrevious value: -"True to park bar (removes from timeline, keeps on roadmap)"New value: +"True parks the bar (off the timeline, kept on the roadmap). Must match the container's when nested" - changed
Input schema / properties / roadmap_id / descriptionPrevious value: -"Roadmap ID (for create)"New value: +"Roadmap ID (required for create; optional on update to skip looking up the bar's roadmap)" - changed
Input schema / properties / tags / descriptionPrevious value: -"Tag strings [\"mobile\",\"urgent\"]"New value: +"Tag strings; REPLACES the bar's tag list. [] clears it"
- Changed
manage_lane5 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"Hex color (#FF5733)"New value: +"DEPRECATED and rejected: lanes have no color field in the ProductPlan API, so it was never applied" - removed
Input schema / properties / color / examplesRemoved value: -[ - "#FF5733", - "#4CAF50" -] - removed
Input schema / properties / color / patternRemoved value: -"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / descriptionAdded value: +{ + "description": "What the lane represents", + "type": "string" +} - added
Input schema / properties / positionAdded value: +{ + "description": "Position of the lane in the roadmap", + "examples": [ + 1 + ], + "type": "integer" +}
3 tool updates
v5.1.0- Changed
manage_bar3 fields changed- changed
Input schema / properties / effort / descriptionPrevious value: -"Effort estimate"New value: +"Effort estimate (unitless integer, scale per team)" - changed
Input schema / properties / parked / descriptionPrevious value: -"Not actively scheduled"New value: +"True to park bar (removes from timeline, keeps on roadmap)" - changed
Input schema / properties / strategic_value / descriptionPrevious value: -"Strategic importance"New value: +"Free-text strategic importance note"
- Changed
manage_idea2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"new, under_review, planned"New value: +"Idea workflow status" - added
Input schema / properties / status / enumAdded value: +[ + "new", + "under_review", + "planned" +]
- Changed
manage_opportunity2 fields changed- changed
Input schema / properties / workflow_status / descriptionPrevious value: -"draft, in_discovery, validated, invalidated, completed"New value: +"Opportunity workflow status" - added
Input schema / properties / workflow_status / enumAdded value: +[ + "draft", + "in_discovery", + "validated", + "invalidated", + "completed" +]
47 tool updates
v5.0.0- First observed
check_status - First observed
get_bar - First observed
get_bar_children - First observed
get_bar_comments - First observed
get_bar_connections - First observed
get_bar_links - First observed
get_idea - First observed
get_idea_form - First observed
get_key_result - First observed
get_launch - First observed
get_launch_section - First observed
get_launch_sections - First observed
get_launch_task - First observed
get_launch_tasks - First observed
get_objective - First observed
get_opportunity - First observed
get_roadmap - First observed
get_roadmap_bars - First observed
get_roadmap_comments - First observed
get_roadmap_complete - First observed
get_roadmap_lanes - First observed
get_roadmap_legends - First observed
get_roadmap_milestones - First observed
health_check - First observed
list_all_customers - First observed
list_all_tags - First observed
list_idea_forms - First observed
list_ideas - First observed
list_key_results - First observed
list_launches - First observed
list_objectives - First observed
list_opportunities - First observed
list_roadmaps - First observed
list_teams - First observed
list_users - First observed
manage_bar - First observed
manage_bar_connection - First observed
manage_bar_link - First observed
manage_idea - First observed
manage_key_result - First observed
manage_lane - First observed
manage_launch - First observed
manage_launch_section - First observed
manage_launch_task - First observed
manage_milestone - First observed
manage_objective - First observed
manage_opportunity
TDQS
Scored across 50 tools
Each tool pairs a distinct resource with a clear read/write action, and the get_/list_/manage_/bulk_ prefixes make intent obvious. Plural-versus-singular pairs like get_launch_sections and get_launch_section are explicitly annotated so an agent can reliably choose the right one.
The set follows a consistent convention: list_* for collections, get_* for single objects/details, manage_* for create/update/delete, and bulk_*_bars for multi-bar operations. Minor exceptions such as check_status and health_check are still self-describing and do not break the overall pattern.
Fifty tools is far beyond the typical well-scoped MCP surface and forces agents to consider a very long list for any task. The tools are individually justified, but the sheer count makes the server feel heavy and increases selection cost.
The server covers nearly every lifecycle needed for ProductPlan work: bars, lanes, milestones, launches, sections, tasks, objectives, key results, ideas, opportunities, links, and dependencies all have appropriate read/write tools. The main gaps are that roadmaps themselves cannot be created/updated/deleted and comments are read-only, though these are likely API constraints rather than design oversights.
Maintenance
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for AI access to SmartBear tools, including BugSnag, Reflect, Swagger, PactFlow, QTM4J.
MCP server for generating rough-draft project plans from natural-language prompts.
Official Fibery MCP server: query and update your workspace from any AI client via OAuth.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for controlling Miro whiteboards with AI assistants. Create and manage stickies, shapes, frames, connectors, and more.8831MIT
- AlicenseCqualityDmaintenanceMCP server for Plane integration, enabling AI agents to interact with Plane APIs and services for project management tasks.100MIT
- AlicenseAqualityDmaintenanceMCP server exposing 40 best-practice product management skills plus workflows and lifecycle tools, instantly accessible to any AI via Model Context Protocol.1993 npm21Apache 2.0
- FlicenseNot gradedqualityDmaintenanceAn unofficial MCP server for DevRev integration, enabling AI assistants to search, manage works, explore product hierarchies, and retrieve object details seamlessly.3-