
Connects Squad's product management platform to Claude or any MCP client via OAuth, exposing 30+ tools for managing opportunities, solutions, goals, feedback, and knowledge. You get full CRUD on each entity type, plus relationship management between them, semantic search across your workspace, and strategic views like OST mapping and roadmaps. The server mints JWTs from OAuth tokens and proxies requests to Squad's API with user isolation. Reach for this when you want to research product ideas, build roadmaps, or query customer insights without leaving your AI conversation. Authentication happens through PropelAuth with automatic OAuth discovery, and there's a companion NPM package if you want to use the tools programmatically in Node apps.
Public tool metadata for what this MCP can expose to an agent.
list_workspacesList all organisations and workspaces available to the current user. Use this to see what workspaces you can switch to.List all organisations and workspaces available to the current user. Use this to see what workspaces you can switch to.
No parameter schema in public metadata yet.
select_workspaceSelect which organisation and workspace to use for subsequent operations. Required when user has access to multiple orgs/workspaces.2 paramsSelect which organisation and workspace to use for subsequent operations. Required when user has access to multiple orgs/workspaces.
orgIdstringworkspaceIdstringget_workspaceGet details of the current workspace. Workspaces contain the project name, detailed description, and mission statement.Get details of the current workspace. Workspaces contain the project name, detailed description, and mission statement.
No parameter schema in public metadata yet.
update_workspaceUpdate the current workspace's details such as name, description, mission statement.5 paramsUpdate the current workspace's details such as name, description, mission statement.
descriptionstringhomepageUrlstringlogoUrlstringmissionStatementstringnamestringcreate_opportunityCreate a new opportunity. An opportunity is a detailed problem statement identified for the organisation. It doesn't have any solutionising and simply captures an opportunity for the organisation.2 paramsCreate a new opportunity. An opportunity is a detailed problem statement identified for the organisation. It doesn't have any solutionising and simply captures an opportunity for the organisation.
descriptionstringtitlestringlist_opportunitiesList all opportunities in the workspace. Opportunities are problem statements identified for the organisation.List all opportunities in the workspace. Opportunities are problem statements identified for the organisation.
No parameter schema in public metadata yet.
get_opportunityGet details of a specific opportunity by ID. Opportunities are problem statements identified for the organisation.2 paramsGet details of a specific opportunity by ID. Opportunities are problem statements identified for the organisation.
opportunityIdstringrelationshipsarrayupdate_opportunityUpdate an existing opportunity's details such as title, description, or status.4 paramsUpdate an existing opportunity's details such as title, description, or status.
descriptionstringopportunityIdstringstatusstringNew · Solved · Planned · InProgresstitlestringdelete_opportunityDelete an opportunity by ID.1 paramsDelete an opportunity by ID.
opportunityIdstringgenerate_solutionsStart the process of generating solutions for an opportunity. This will use Squad AI to generate new potential solutions for a given opportunity.2 paramsStart the process of generating solutions for an opportunity. This will use Squad AI to generate new potential solutions for a given opportunity.
opportunityIdstringpromptstringmanage_opportunity_relationshipsAdd or remove relationships between an opportunity and other entities (solutions, outcomes, or insights).5 paramsAdd or remove relationships between an opportunity and other entities (solutions, outcomes, or insights).
actionstringadd · removeinsightIdsarrayopportunityIdstringoutcomeIdsarraysolutionIdsarraycreate_solutionCreate a new solution. A solution is a proposed approach to address an opportunity. The 'prd' field should contain the complete detailed specification, while 'description' should be a brief summary for AI context.6 paramsCreate a new solution. A solution is a proposed approach to address an opportunity. The 'prd' field should contain the complete detailed specification, while 'description' should be a brief summary for AI context.
consarraydescriptionstringprdstringprosarraystatusstringNew · InDevelopment · Planned · Complete · Cancelled · Backlogtitlestringlist_solutionsList all solutions in the workspace. Solutions are proposed approaches to address opportunities.2 paramsList all solutions in the workspace. Solutions are proposed approaches to address opportunities.
filterstringroadmap · recommendedhorizonstringnow · next · laterget_solutionGet details of a specific solution by ID.2 paramsGet details of a specific solution by ID.
relationshipsarraysolutionIdstringedit_solution_prdEdit the PRD (Product Requirements Document) of a solution. Use this to write or rewrite the detailed specification, implementation plan, and requirements for a solution.2 paramsEdit the PRD (Product Requirements Document) of a solution. Use this to write or rewrite the detailed specification, implementation plan, and requirements for a solution.
prdstringsolutionIdstringupdate_solutionUpdate a solution's metadata (title, description, pros, cons, status, horizon). To edit the PRD content, use edit_solution_prd. To change priority, use prioritise_solutions. To move a solution between roadmap horizons, set the horizon field.8 paramsUpdate a solution's metadata (title, description, pros, cons, status, horizon). To edit the PRD content, use edit_solution_prd. To change priority, use prioritise_solutions. To move a solution between roadmap horizons, set the horizon field.
consarraydescriptionstringhorizonstringnow · next · laterprdstringprosarraysolutionIdstringstatusstringNew · InDevelopment · Planned · Complete · Cancelled · Backlogtitlestringdelete_solutionDelete a solution by ID.1 paramsDelete a solution by ID.
solutionIdstringmanage_solution_relationshipsAdd or remove relationships between a solution and other entities (opportunities).3 paramsAdd or remove relationships between a solution and other entities (opportunities).
actionstringadd · removeopportunityIdsarraysolutionIdstringprioritise_solutionsReorder the priority of solutions by moving them before a specified solution. This is the only way to change solution priority/ordering in the workspace.2 paramsReorder the priority of solutions by moving them before a specified solution. This is the only way to change solution priority/ordering in the workspace.
beforeIdvaluesolutionIdsarraycreate_goalCreate a new goal. A goal is a business objective that the organization aims to achieve.7 paramsCreate a new goal. A goal is a business objective that the organization aims to achieve.
analyticEventsarraydescriptionstringhideContentbooleanownerIdstringprioritynumbertitlestringtrendnumberlist_goalsList all goals in the workspace. Goals are business objectives that the organization aims to achieve.List all goals in the workspace. Goals are business objectives that the organization aims to achieve.
No parameter schema in public metadata yet.
get_goalGet details of a specific goal by ID. Goals are business objectives that the organization aims to achieve.2 paramsGet details of a specific goal by ID. Goals are business objectives that the organization aims to achieve.
goalIdstringrelationshipsarrayupdate_goalUpdate an existing goal's details.8 paramsUpdate an existing goal's details.
analyticEventsarraydescriptionstringgoalIdstringhideContentbooleanownerIdstringprioritynumbertitlestringtrendnumberdelete_goalDelete a goal by ID.1 paramsDelete a goal by ID.
goalIdstringmanage_goal_relationshipsAdd or remove relationships between a goal and opportunities for the business.3 paramsAdd or remove relationships between a goal and opportunities for the business.
actionstringadd · removegoalIdstringopportunityIdsarraycreate_knowledgeCreate a new knowledge entry. Knowledge entries are text documents that can be used as references or information sources.3 paramsCreate a new knowledge entry. Knowledge entries are text documents that can be used as references or information sources.
contentstringdescriptionstringtitlestringlist_knowledgeList all knowledge entries in the workspace. Knowledge entries are text documents that can be used as references or information sources. List only shows the available items and a short description for the actual knowledge use the get by id call.List all knowledge entries in the workspace. Knowledge entries are text documents that can be used as references or information sources. List only shows the available items and a short description for the actual knowledge use the get by id call.
No parameter schema in public metadata yet.
get_knowledgeGet details of a specific knowledge entry by ID. Knowledge entries are text documents that can be used as references or information sources.1 paramsGet details of a specific knowledge entry by ID. Knowledge entries are text documents that can be used as references or information sources.
knowledgeIdstringdelete_knowledgeDelete a knowledge entry by ID.1 paramsDelete a knowledge entry by ID.
knowledgeIdstringcreate_feedbackCreate a new feedback entry. Feedback represents raw, unprocessed feedback from users that can later be analyzed and converted into insights.5 paramsCreate a new feedback entry. Feedback represents raw, unprocessed feedback from users that can later be analyzed and converted into insights.
contentstringsentimentCategorystringPositive · Neutral · NegativesentimentConfidencenumbersentimentScorenumbersourcestringlist_feedbackList all feedback entries in the workspace. Feedback entries are raw customer feedback that can be processed into insights.List all feedback entries in the workspace. Feedback entries are raw customer feedback that can be processed into insights.
No parameter schema in public metadata yet.
get_feedbackGet details of a specific feedback entry by ID. Feedback entries are raw customer feedback.2 paramsGet details of a specific feedback entry by ID. Feedback entries are raw customer feedback.
feedbackIdstringrelationshipsstringinsightsdelete_feedbackDelete a feedback entry by ID.1 paramsDelete a feedback entry by ID.
feedbackIdstringcreate_insightCreate a new insight entry. An insight is customer-generated feedback about your product, often from reviews, surveys, or questionnaires.3 paramsCreate a new insight entry. An insight is customer-generated feedback about your product, often from reviews, surveys, or questionnaires.
descriptionstringtitlestringtypestringFeedback · Bug · FeatureRequestlist_insightsList all insights for the workspace. These insights are gathered from various sources, created by customers, and help understand how to improve the business.List all insights for the workspace. These insights are gathered from various sources, created by customers, and help understand how to improve the business.
No parameter schema in public metadata yet.
get_insightGet details of a specific insight entry by ID. Insight entries are text documents that can be used as references or information sources.2 paramsGet details of a specific insight entry by ID. Insight entries are text documents that can be used as references or information sources.
insightIdstringrelationshipsarraydelete_insightDelete an insight entry by ID.1 paramsDelete an insight entry by ID.
insightIdstringsimilarity_searchPerform a semantic similarity search across the workspace. This searches through knowledge documents, feedback insights, opportunities, and solutions to find content similar to your query. Each result will contain a nodeId or an id. These can be used to retrieve the full conte...2 paramsPerform a semantic similarity search across the workspace. This searches through knowledge documents, feedback insights, opportunities, and solutions to find content similar to your query. Each result will contain a nodeId or an id. These can be used to retrieve the full conte...
filtersarrayquerystringview_strategy_contextShow an entity in its product strategy tree — displays the entity, its parent chain, and direct children in a rich visual UI. ALWAYS use this tool when the user asks about strategy, prioritisation, reasoning, context, positioning, or 'why' behind any entity. Use it when the us...2 paramsShow an entity in its product strategy tree — displays the entity, its parent chain, and direct children in a rich visual UI. ALWAYS use this tool when the user asks about strategy, prioritisation, reasoning, context, positioning, or 'why' behind any entity. Use it when the us...
entityIdstringentityTypestringworkspace · goal · opportunity · solution · insight · feedbackview_roadmapShow the product roadmap — solutions organized by time horizon (Now/Next/Later) with goal context. Use this when the user asks about the roadmap, what's planned, what's coming next, priorities, or wants to see an overview of solutions being built.3 paramsShow the product roadmap — solutions organized by time horizon (Now/Next/Later) with goal context. Use this when the user asks about the roadmap, what's planned, what's coming next, priorities, or wants to see an overview of solutions being built.
goalIdstringshowResolvedbooleanstatusFilterarrayA remote MCP server that brings Squad — the AI product feedback intelligence platform — directly into your AI workflows. Connect Squad to Claude, ChatGPT, or any MCP-compatible AI assistant to turn raw user feedback into signals, insights, actions, and briefs without context switching.
Squad continuously ingests feedback, clusters it into signals, distils it into insights, and links it to the actions and goals that move your product forward. The MCP server exposes that same intelligence — read the evidence behind a decision, capture new feedback, and generate briefs from your assistant.
Connect Squad to your AI assistant in seconds:
Claude Code:
claude mcp add --transport http squad https://mcp.meetsquad.ai/mcp
On first use, you'll be prompted to authenticate via OAuth in your browser.
Other MCP Clients:
Connect using https://mcp.meetsquad.ai/mcp — OAuth configuration is automatically discovered via the server's .well-known/oauth-protected-resource metadata (which points clients at PropelAuth as the authorization server).
See USAGE_EXAMPLES.md for detailed real-world examples. A few things you can ask:
Squad entities are referenced by short display IDs so the assistant can cite its evidence:
| Prefix | Entity | Prefix | Entity |
|---|---|---|---|
SI- | Signal | GL- | Goal |
IN- | Insight | BR- | Brief |
AC- | Action | DC- | Document |
CL- | Cluster |
The server exposes 30 tools. Write tools require a token minted with the write:workspace scope; read tools only need read:workspace.
list_workspaces — List every organisation and workspace you can access, with the current selection marked.select_workspace — Select which organisation and workspace subsequent tools operate on.get_workspace_overview — One-call orientation: mission and description, top goals, recent signal activity, evidence-chain health, and open work counts.update_workspace — Update the current workspace's name, description, mission statement or logo.list_members — People in the current organisation with their user IDs.search — Keyword search across signals, insights, actions, goals, documents and clusters.get_entity — Fetch any entity by display ID (SI-1, IN-1, AC-1, GL-1, BR-1, DC-1, CL-1) or UUID. Also how you check on async work.list_signals — Browse raw feedback signals with filters for source, type, sentiment, cluster and date range.find_similar_signals — Semantically related signals for a given signal — "has anyone else said this?".list_clusters — Browse signal clusters (recurring themes in feedback) with sizes and labels.get_cluster — A cluster's label, stats, member signals and linked insights.list_insights — Browse distilled insights ranked by combined score, with category/score/status filters or scoped to a goal.list_actions — Ranked actions (what the evidence says to do next) filtered by status, assignee, priority or parent insight.get_action_context — Everything needed to execute an action in one call: the action, the parent insight, the customer evidence behind it, and the goals it serves.update_action — Edit an action's priority, effort, category or notes; assign it; or link it to an insight or brief.update_action_status — Move an action through its lifecycle: start, complete, dismiss or snooze.list_goals — Strategic goals ordered by importance.create_goal — Create a strategic goal.update_goal — Update a goal's title, description or importance.update_insight — Curate an insight: set category or status, and link/unlink the goal it supports.dismiss_signal — Permanently remove a signal from the workspace (noise, spam, or mis-ingested content).get_activity — The workspace change feed (humans and Squad agents), newest first.list_documents — Browse workspace knowledge documents (and briefs) with their paths and tags.create_document — Create a knowledge document from markdown (research summaries, meeting notes, analyses).update_document — Replace a document's markdown body and/or title, and manage tags.list_briefs — Briefs with their status (building/draft/in_review/finalised/failed) and recommendation.generate_brief — Kick off AI generation of a brief from an action or insight.update_brief_status — Move a brief through its review lifecycle: draft, in_review, or finalised.ingest_signal — Pipe user feedback into the evidence chain (1–50 items, deduplicated server-side).list_integrations — Connected feedback sources for this workspace and their sync health.Ready-made workflows exposed as MCP prompts:
triage-feedback — check for duplicates, ingest a piece of feedback, and report where it landed.weekly-product-review — what changed, what the evidence says, and what needs deciding.draft-decision-brief — generate a brief from an action or insight and walk it to a readable draft.ground-this-ticket — for coding agents: pull the customer evidence behind a piece of work before building it.Pin these so strategy questions need no tool calls:
squad://workspace/context — the current workspace's mission and product context.squad://goals — the workspace's strategic goals with importance rankings.readOnlyHint / destructiveHint) on every toolwrite:workspace)┌─────────────┐ OAuth ┌──────────────┐
│ Claude / │ ◄────────────────────► │ PropelAuth │
│ ChatGPT │ (Authentication) │ (IdP) │
└─────────────┘ └──────────────┘
│
│ HTTPS + Bearer Token
▼
┌──────────────────────────────────────────────┐
│ Squad MCP Server │
│ ┌────────────────────────────────────────┐ │
│ │ OAuth → introspect + verify token │ │
│ │ JWT minting → service credentials │ │
│ │ Redis → workspace selection + tokens │ │
│ │ MCP handler → tools / prompts / res. │ │
│ │ PostHog → tool-call telemetry │ │
│ └────────────────────────────────────────┘ │
└──────────────────────────────────────────────┘
│
│ Squad API Calls (minted JWT)
▼
┌──────────────┐
│ Squad API │
└──────────────┘
The server is built on mcp-use v2 and talks to the Squad platform API over GraphQL. Each request is served statelessly: the MCP layer holds no session, and every call re-introspects its own bearer token. Redis stores the durable per-user state (workspace selection and minted-token cache), so any instance can serve any request. Backend types are generated from a committed GraphQL schema snapshot (see GraphQL codegen).
This repository contains the source code for the Squad MCP remote server.
flake.nix)# Clone repository
git clone https://github.com/the-basilisk-ai/squad-mcp.git
cd squad-mcp
# Install dependencies
pnpm install
# Configure environment
cp .env.example .env
# Edit .env with your PropelAuth credentials (and SQUAD_ENV=dev to target the dev platform)
# Start development server with hot reload
pnpm dev
# Server available at http://localhost:3232
| Variable | Required | Purpose |
|---|---|---|
PROPELAUTH_CLIENT_ID / PROPELAUTH_CLIENT_SECRET | ✅ | OAuth 2.1 client credentials for token introspection |
PROPELAUTH_API_KEY | ✅ | Backend integration key for minting service JWTs |
SQUAD_ENV | dev or production (default production) — selects auth/API/app URLs | |
PORT / MCP_URL / BASE_URI | Server port and externally-advertised base URL | |
REDIS_URL | Redis connection for deploy-safe workspace selection and token cache (in-memory if unset) | |
SQUAD_GRAPHQL_URL | Override the Squad GraphQL endpoint (also used by codegen) | |
POSTHOG_API_KEY / POSTHOG_HOST | Enable tool-call telemetry | |
LOG_LEVEL | Logger verbosity |
pnpm dev # Start dev server with hot reload (mcp-use)
pnpm build # Build the server (mcp-use)
pnpm start # Start the built server
pnpm deploy # Deploy via mcp-use
pnpm test # Run unit tests (vitest)
pnpm format # Lint/format check (biome)
pnpm format:fix # Auto-fix lint/format issues
pnpm codegen # Regenerate GraphQL types from schema.graphql
pnpm codegen:check # Fail if generated GraphQL types are stale
# Check health
curl http://localhost:3232/health
# Check OAuth discovery
curl http://localhost:3232/.well-known/oauth-protected-resource
# Check server-card discovery (SEP-2127)
curl -H 'Accept: application/mcp-server-card+json' \
http://localhost:3232/mcp/server-card
curl http://localhost:3232/.well-known/ai-catalog.json
# Test with the built-in inspector
pnpm dev # then open the inspector and connect to http://localhost:3232/mcp
squad-mcp/
├── server.ts # MCP server entry point (OAuth, tool/prompt/resource registration)
├── server.json # MCP registry metadata (see MCP_REGISTRY.md)
├── schema.graphql # Committed snapshot of the Squad platform GraphQL schema
├── codegen.ts # GraphQL Code Generator config
├── src/
│ ├── tools/ # Tool implementations, grouped by surface
│ │ ├── registry.ts # Single registration path (annotations, errors, telemetry)
│ │ ├── workspace.ts # list/select workspaces, overview, members
│ │ ├── search.ts # semantic search
│ │ ├── get-entity.ts # fetch any entity by display ID / UUID
│ │ ├── evidence.ts # signals, clusters, insights
│ │ ├── actions-read.ts # list actions, action context
│ │ ├── actions-write.ts # update actions + status
│ │ ├── strategy-read.ts # goals, activity
│ │ ├── strategy-write.ts # create/update goals, insights, dismiss signals
│ │ ├── knowledge.ts # documents + briefs
│ │ ├── ingest.ts # ingest new signals
│ │ └── integrations.ts # list connected sources
│ ├── prompts/ # MCP prompt workflows
│ ├── resources/ # MCP resources (workspace context, goals)
│ ├── gql/ # Generated GraphQL types (pnpm codegen)
│ ├── graphql/ # GraphQL operation documents
│ ├── helpers/ # OAuth provider, token minting, workspace selection, KV/Redis
│ └── lib/ # Squad API client, logger, telemetry, server card
├── railway.toml # Railway deployment config
└── .env.example # Environment template
This is a hosted service maintained by Squad. Users connect via OAuth — no self-hosting required.
Architecture notes (for contributors):
/health readiness checkhttps://mcp.meetsquad.ai/mcp/server-card and an AI Catalog at https://mcp.meetsquad.ai/.well-known/ai-catalog.json, both public, cacheable and built from server.jsonNeed help with the Squad MCP server?
Contributions welcome! Pre-commit hooks run biome and vitest automatically. Please ensure:
pnpm format passes (biome)pnpm build compiles without errorspnpm test passespnpm codegen:check passes if you touched GraphQL operationsMIT
Backend access is typed via GraphQL Code Generator. schema.graphql is a
committed snapshot of the Squad platform API schema; src/gql/ is generated
from it plus the operation documents in src/graphql/.
packages/graphql/src/schema/generated.graphql
from the API repo over schema.graphql (or set SQUAD_GRAPHQL_URL to
introspect a live endpoint), then run pnpm codegen.pnpm codegen:check and fails when src/gql/ is stale.