MCP API

Compass exposes a Model Context Protocol (MCP) endpoint that lets AI agents read and write discovery data programmatically. This means you can connect tools like Claude, Cursor, or any MCP-compatible client to your workspace and have AI assistants create OKRs, log opportunities from user research notes, or update experiment results — all without leaving your AI workflow.

Endpoint

POST /api/mcp

The MCP endpoint uses Streamable HTTP transport, which is compatible with all modern MCP clients.

Authentication

Generate an API key from Settings → API Keys. Pass it as a Bearer token in the Authorization header:

Authorization: Bearer compass_your_api_key_here

API keys are workspace-scoped. A key can read and write all data in the workspace it was created for. Treat API keys like passwords — rotate them in Settings if one is compromised.

What Agents Can Do

The MCP server exposes tools that agents can call, grouped below by area.

Workspace

Tool Description
get_workspace_summary Returns high-level counts and status for a workspace: OKR cycles, opportunities, experiments, roadmap items, active experiments, active OKR cycle, and squads
list_workspaces List all workspaces in an organization by org slug; use as the first call when you don't yet know a workspace ID
get_workspace_by_slug Look up a single workspace's ID, name, and description directly by org slug + workspace slug, without listing all workspaces
create_workspace Create a new workspace inside an organization

OKRs

Tool Description
list_okr_cycles List all OKR cycles for a workspace with IDs, titles, dates, and status
create_okr_cycle Create a new OKR cycle for a workspace (defaults to DRAFT status)
get_okr_cycle Return a full OKR cycle with Objective/KR progress, higher-level parent links, and supporting Objectives
create_objective Create an Objective; optionally assign a squad or link to an eligible KR in a longer-horizon cycle
add_key_result Add a Key Result to an existing Objective
log_checkin Record a progress check-in for a Key Result and update its current value
list_eligible_parent_key_results List open, longer-horizon KRs whose cycle contains the specified child cycle
set_objective_parent_kr Link an Objective to an eligible higher-level KR it supports, or clear the link

Discovery — Opportunities, Solutions, Assumptions

Tool Description
list_opportunities Fetch all opportunities in the workspace
get_opportunity Return full detail for an opportunity: solutions, assumptions per solution, and experiments linked to those assumptions
create_opportunity Create a new opportunity with title, description, status
update_opportunity_status Move an opportunity through its discovery pipeline: EXPLORING → VALIDATING → PRIORITIZED → ACTIVE → ARCHIVED
link_opportunity_to_kr Associate an opportunity with a Key Result it is expected to move (or clear the link)
add_solution Add a proposed Solution to an Opportunity
add_assumption Add a testable Assumption to a Solution, with a risk level (HIGH/MEDIUM/LOW); starts UNTESTED
update_assumption Update an Assumption's title, risk level, or status (UNTESTED/TESTING/VALIDATED/INVALIDATED)
delete_assumption Permanently delete an Assumption; unlinks (does not delete) any Experiments or Evidence that referenced it
add_solution_plan Log a proposed implementation/engineering plan on a Solution as the pinned "current plan" entry in its Plan & Discussion thread; a later call on the same solution supersedes the previous plan
add_solution_comment Add a reply comment to a Solution's Plan & Discussion thread
list_solution_comments Fetch the full Plan & Discussion thread for a Solution in chronological order, each entry labeled PLAN or COMMENT
get_solution_comment Fetch a single Plan & Discussion entry by ID
update_solution_comment Edit the body of an existing Plan & Discussion entry
delete_solution_comment Permanently delete a Plan & Discussion entry
approve_solution_plan Mark a PLAN entry as APPROVED (only applies to PLAN entries, not COMMENT replies)
reject_solution_plan Mark a PLAN entry as REJECTED (only applies to PLAN entries, not COMMENT replies)
promote_to_roadmap Promote a validated Solution directly to the roadmap, creating a Roadmap Item linked back to the originating opportunity. Accepts an optional isPrivate flag

Experiments

Tool Description
list_experiments Fetch all experiments
get_experiment Return full details for a single experiment: hypothesis, method, kill condition, linked assumption, all logged results, and conclusion
create_experiment Create a new experiment with hypothesis and method (starts in DESIGNING status)
log_experiment_result Record an observation or data point for a running experiment
conclude_experiment Conclude an experiment with PROCEED, KILL, or ITERATE; automatically updates the linked Assumption's status (PROCEED → VALIDATED, KILL → INVALIDATED, ITERATE → UNTESTED)

Roadmap

Tool Description
list_roadmap_items Fetch active roadmap items for a workspace, grouped by horizon (including LAUNCHING/LAUNCHED), including start/end dates and whether each item is private (isPrivate)
add_to_roadmap Create a roadmap item in NOW/NEXT/LATER/SHIPPED, optionally with a start date and end date for the Timeline view, and an isPrivate flag to hide it from the public portal roadmap and block voting on it
update_roadmap_item Update a roadmap item's horizon, status, title, description, start/end dates, or isPrivate flag. Rejects horizon: LAUNCHING/LAUNCHED — use set_launch_tier to move an item into LAUNCHING
create_checklist_template Create a reusable launch checklist template for a workspace, scoped to a launch tier (TIER_1/TIER_2/TIER_3), with an ordered list of items
list_checklist_templates List a workspace's checklist templates, optionally filtered by launch tier
set_launch_tier Move a roadmap item into the LAUNCHING horizon by picking a launch tier; attaches a checklist cloned from an explicit or auto-resolved (most recent ACTIVE) template for that tier. Rejects items already LAUNCHING/LAUNCHED
get_launch_checklist Get the launch checklist for a roadmap item, including each item's status and ID
update_launch_checklist_item Set a launch checklist item's status (PENDING/DONE/SKIPPED)

Squads

Tool Description
create_squad Create a squad in a workspace with a name and optional six-digit hex color
list_squads List all squads in a workspace with their IDs and colors
get_squad Return a squad's ID, workspace ID, name, and color
update_squad Update a squad's name and/or color
assign_squad Assign a Squad to any object — opportunity, experiment, roadmap item, objective, or task (or clear it)

Tasks

Task is the standalone delivery/tracking entity used both for full engineering sprint delivery (replacing a Jira-style board) and lightweight PM initiative tracking — one status vocabulary, BACKLOG → TODO → IN_PROGRESS → BLOCKED ⇄ IN_REVIEW → DONE, with CANCELLED as a terminal state and BLOCKED a first-class column. Tasks link to other Compass objects (Opportunity, Solution, Roadmap Item, Objective, Key Result, Doc, Experiment, Feedback Item) many-to-many via TaskLink, and support Epic → Task → Subtask hierarchy via parentTaskId.

Tool Description
create_task Create a Task with a title (required); optionally description, status (default TODO), priority (default MEDIUM), squad, parent task (to create a Subtask), assignee, freeform owner name, story points, due date, or iteration label
get_task Return full detail for a Task: fields, parent Epic (if any), subtasks, and resolved links to other Compass objects
list_tasks List tasks in a workspace, filterable by status, priority, squad, assignee, parent task (pass null for top-level Epics/tasks only), or a linked object; optionally nest subtasks under their parent
update_task Update a Task's title, description, priority, assignee, owner, story points, due date, or iteration — does not accept status
move_task_status Dedicated status-transition tool for a Task, including moving it into or out of BLOCKED
link_task Link a Task to another Compass object; idempotent — re-linking the same pair is a no-op
unlink_task Remove a link between a Task and another Compass object
list_task_links List all links for a Task, grouped by linked object type with resolved titles

Feedback

Tool Description
create_feedback Create a new feedback item directly via MCP — the internal/agent-facing counterpart to the public portal submission endpoint, which requires a browser session. Defaults to type IDEA
list_feedback Fetch customer feedback items for a workspace, with vote counts, type (BUG/IDEA), and status
get_feedback_item Fetch full details for a single feedback item, including its linked opportunity if present
update_feedback_status Update a feedback item's status (OPEN, UNDER_REVIEW, PLANNED, CLOSED), with an optional note
update_feedback_type Reclassify a feedback item as a BUG or an IDEA
link_feedback_to_opportunity Link a feedback item (typically an IDEA) to an existing opportunity, connecting it to the discovery flow
promote_feedback_to_roadmap Promote a feedback item (typically a BUG) directly to the roadmap, skipping discovery entirely. Accepts an optional isPrivate flag (e.g. for a security-flagged bug)

Evidence

Tool Description
add_evidence Attach a piece of evidence (interview, feedback, support ticket, experiment result, or analytics) to an opportunity, solution, or assumption
link_evidence Re-parent existing evidence to a different opportunity, solution, or assumption
list_evidence Fetch all evidence attached to a given opportunity, solution, or assumption

Docs

Tool Description
list_docs List all docs in a workspace as an indented tree; use to discover doc IDs before calling get_doc or update_doc
get_doc Return the full content of a single doc, including its parent, children list, complete markdown body, and docType/roadmapItemId when set
create_doc Create a new doc in a workspace, optionally nested under a parent doc. Pass roadmapItemId and docType: GTM_POSITIONING_BRIEF to create a Positioning & Messaging Brief linked 1:1 to a roadmap item (auto-fills a starter template if content is omitted)
update_doc Update an existing doc's title, content, and/or icon
create_doc_version Save a manual, named snapshot of a doc's current content. Params: docId, label (optional), authorName. Always writes a new version, even if one was just saved seconds ago — named snapshots are never coalesced away
list_doc_versions List a doc's saved versions (id, label, author, created date), newest first, alongside the doc's own current title and last-updated time as a reference point. Param: docId. Does not include full content — call get_doc_version for that
get_doc_version Return the full title/content/metadata/icon snapshot of a single saved doc version. Param: versionId
restore_doc_version Restore a doc's live content to a previously saved version. Param: versionId. The doc's current state is snapshotted first (labeled "Before restore"), so restoring never loses data

Every update_doc call also automatically snapshots the doc's pre-change state before applying the new values (coalesced to one snapshot per 5-minute window per author, so an agent making several quick edits in a row doesn't flood the history) — you don't need to call create_doc_version yourself unless you want a deliberately named checkpoint.

Doc inline comments

Google-Docs-style comments anchored to a span of a doc's text (or left as a general, doc-level note). Threads are one level deep: a root comment optionally carries an anchor; replies attach to a root and never carry their own anchor. Anchors are stored separately and never embedded in the doc's markdown.

Tool Description
add_doc_comment Add a comment to a doc. Params: docId, body, authorName, plus optional parentId (reply to a root comment) and optional anchor fields (anchorText, anchorPrefix, anchorSuffix, anchorStart, anchorEnd). Omit all anchor fields for a doc-level general comment. Replies never anchor. Returns the new comment's ID: line
list_doc_comments List a doc's comments grouped into threads (roots with their replies), oldest-first. Params: docId, optional status (OPEN or RESOLVED) to filter
get_doc_comment Return a single comment's full body, author, status, anchor context, and timestamps. Param: commentId
update_doc_comment Edit a comment's body text (does not change status or anchor). Params: commentId, body
delete_doc_comment Delete a comment. Deleting a root also deletes all of its replies. Param: commentId
resolve_doc_comment Mark a comment RESOLVED — it drops out of the doc's default open-only view and stops highlighting. Param: commentId
reopen_doc_comment Reopen a resolved comment, setting its status back to OPEN. Param: commentId

Anchor offsets (anchorStart/anchorEnd) are positions in the doc's plain-text projection, not its raw markdown — the same projection the editor highlights against. In practice agents most often add doc-level or freshly-computed anchored comments; the UI is what captures precise anchors from a live text selection.

Help

Tool Description
search_help Full-text search over Compass's own product/usage documentation (the same content rendered at /help/[slug]); returns the best-matching doc section(s) with a Path pointer (deep-linking to a heading anchor when applicable) and a short excerpt. Not workspace-scoped
get_help Resolve a free-text topic (a doc slug, title, or close match) to a single help doc and return its full raw markdown content plus its /help/[slug] path. Not workspace-scoped

Scoring

Tool Description
list_scoring_models List an organization's scoring model templates (e.g. RICE, ICE) with status, formula type, version, and metric counts
get_scoring_model Get full detail for a scoring model, including every metric's key, label, bounds, weight, and direction
create_scoring_model Create a new org-level scoring model template with its metrics (WEIGHTED_SUM or MULTIPLICATIVE formula)
update_scoring_model Update a scoring model's name/description and/or replace its metrics (replacing metrics bumps the model version)
archive_scoring_model Archive a scoring model (hidden from new workspace selections, but existing usages remain valid)
get_workspace_scoring_model Get the scoring model currently active for a workspace, including all its metrics
set_workspace_scoring_model Set (or clear) the workspace's active scoring model
score_opportunity Compute and save an opportunity's score using its workspace's active scoring model
get_opportunity_score Get an opportunity's saved score, including a stale flag if the live model has since been updated
list_top_opportunities List scored opportunities ranked by normalized score (0-100); pass orgSlug for a cross-workspace comparability view or workspaceId for a single workspace

Example: Connecting Claude Desktop

Add this to your Claude Desktop claude_desktop_config.json:

{
  "mcpServers": {
    "compass": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://your-compass-url.vercel.app/api/mcp"],
      "env": {
        "MCP_AUTH_HEADER": "Authorization: Bearer compass_your_api_key"
      }
    }
  }
}

Use Cases

  • Research synthesis — Paste interview notes into your AI assistant and have it extract and create opportunities directly in Compass
  • Automated check-ins — A scheduled agent that reads metrics from your analytics platform and creates KR check-ins
  • Experiment logging — An agent that monitors your A/B testing platform and records experiment results when tests complete
  • Standup summaries — An agent that reads your current roadmap and discovery board and generates a daily team update