Skip to content

Parabol MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Start Parabol retrospectives, standups and sprint poker; read teams/meetings/tasks; create tasks.

Deletes · 9

21 tools: 9 can delete or cancel things and 12 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http parabol https://parabol.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

21 tools

Deletes or cancels 9Claude Code: deny
  • add_commentMUTATES Parabol data: add a comment to a meeting discussion thread.No findings

    Why it is in this group

    • The name "add_comment" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: add a comment to a meeting discussion thread. Required: content (stringified TipTap/ProseMirror JSON document), discussionId, threadSortOrder (Int). Optionally isAnonymous or threadParentId (to reply). Parabol GraphQL: addComment(comment) → union. Requires COMMENTS_WRITE.

    Annotations the server declares

    • title: Add a comment
    • destructiveHint: true
  • create_reflectionMUTATES Parabol data: add a reflection card to a running retrospective's reflect phase.No findings

    Why it is in this group

    • The name "create_reflection" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: add a reflection card to a running retrospective's reflect phase. Required: meetingId, promptId (the reflect-prompt/column), sortOrder (Float). `content` (optional) is a stringified TipTap/ProseMirror JSON document (<=2000 chars). Parabol GraphQL: createReflection(input). Requires MEETINGS_WRITE.

    Annotations the server declares

    • title: Create a reflection
    • destructiveHint: true
  • create_taskMUTATES Parabol data: create a task on a team.No findings

    Why it is in this group

    • The name "create_task" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: create a task on a team. Required: teamId and status (active|stuck|done|future). Provide `plaintextContent` for the task text (and/or `content`, which is a stringified TipTap/ProseMirror JSON document). Optionally assign to a userId or link to a meetingId/discussionId. Parabol GraphQL: createTask(newTask, area). Requires TASKS_WRITE.

    Annotations the server declares

    • title: Create a task
    • destructiveHint: true
  • invite_to_teamMUTATES Parabol data: send team invitations by email.No findings

    Why it is in this group

    • The name "invite_to_team" says "invite": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: send team invitations by email. Required: teamId and invitees (an array of email addresses). Optionally scope to a meetingId. Parabol GraphQL: inviteToTeam(teamId, invitees). Requires TEAMS_WRITE.

    Annotations the server declares

    • title: Invite users to a team
    • destructiveHint: true
  • parabol_graphqlMUTATES Parabol data (potentially): escape hatch to run an arbitrary Parabol GraphQL operation — including any mutation — against action.parabol.co/graphql with optional variables.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data (potentially): escape hatch to run an arbitrary Parabol GraphQL operation — including any mutation — against action.parabol.co/graphql with optional variables. Use for operations not covered by the curated tools. Your token must carry the scope the operation requires. Prefer parabol_query for read-only calls.

    Annotations the server declares

    • title: Run a GraphQL operation (query or mutation)
    • destructiveHint: true
  • start_checkinMUTATES Parabol data: start a new Check-in (Action) meeting for a team (returns the new meetingId).No findings

    Why it is in this group

    • The name "start_checkin" says "start": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: start a new Check-in (Action) meeting for a team (returns the new meetingId). Required: teamId. Optionally name it. Parabol GraphQL: startCheckIn → union. Requires MEETINGS_WRITE.

    Annotations the server declares

    • title: Start a check-in meeting
    • destructiveHint: true
  • start_retrospectiveMUTATES Parabol data: start a new retrospective meeting for a team (returns the new meetingId).No findings

    Why it is in this group

    • The name "start_retrospective" says "start": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: start a new retrospective meeting for a team (returns the new meetingId). Required: teamId. Optionally name it. Parabol GraphQL: startRetrospective → union. Requires MEETINGS_WRITE.

    Annotations the server declares

    • title: Start a retrospective
    • destructiveHint: true
  • start_team_promptMUTATES Parabol data: start a new async Standup (Team Prompt) meeting for a team.No findings

    Why it is in this group

    • The name "start_team_prompt" says "start": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: start a new async Standup (Team Prompt) meeting for a team. Required: teamId. Optionally name it (default 'Standup'). Parabol GraphQL: startTeamPrompt → union. Requires MEETINGS_WRITE.

    Annotations the server declares

    • title: Start a standup (team prompt)
    • destructiveHint: true
  • update_taskMUTATES Parabol data: update an existing task.No findings

    Why it is in this group

    • The name "update_task" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    MUTATES Parabol data: update an existing task. Required: id. Optionally change content (stringified TipTap JSON), status, assignee (userId), or sortOrder. Only included fields change. Parabol GraphQL: updateTask(updatedTask, area). Requires TASKS_WRITE.

    Annotations the server declares

    • title: Update a task
    • destructiveHint: true
Only reads 12Claude Code: allow
  • get_meetingFetch one meeting by id with its phases and stages.No findings

    Why it is in this group

    • The name "get_meeting" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one meeting by id with its phases and stages. For a retrospective it also returns the reflection groups and reflections plus vote/topic/task/comment counts. Uses __typename so you can tell meeting types apart. Parabol GraphQL: viewer.meeting(meetingId). Requires MEETINGS_READ.

    Annotations the server declares

    • title: Get a meeting
    • readOnlyHint: true
  • get_organizationFetch one organization by id, including its teams.No findings

    Why it is in this group

    • The name "get_organization" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one organization by id, including its teams. Parabol GraphQL: viewer.organization(orgId). Requires ORGS_READ (+ TEAMS_READ for teams).

    Annotations the server declares

    • title: Get an organization
    • readOnlyHint: true
  • get_teamFetch one team by id: metadata, its team members (with each member's user), active meetings, and organization.No findings

    Why it is in this group

    • The name "get_team" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one team by id: metadata, its team members (with each member's user), active meetings, and organization. Parabol GraphQL: viewer.team(teamId). Requires TEAMS_READ (+ MEETINGS_READ for activeMeetings, ORGS_READ for organization).

    Annotations the server declares

    • title: Get a team
    • readOnlyHint: true
  • get_viewerFetch the authenticated Parabol user (the token owner): id, preferredName, email, tier, and the team ids (tms) they belong to.No findings

    Why it is in this group

    • The name "get_viewer" says "get": a word for reading.
    Description, as the server wrote it
    Fetch the authenticated Parabol user (the token owner): id, preferredName, email, tier, and the team ids (tms) they belong to. Parabol GraphQL: query { viewer { ... } }. Requires the USERS_READ scope. Start here to discover your identity and team ids.

    Annotations the server declares

    • title: Get current user (viewer)
    • readOnlyHint: true
  • list_active_meetingsList a team's currently-active (in-progress) meetings.No findings

    Why it is in this group

    • The name "list_active_meetings" says "list": a word for reading.
    Description, as the server wrote it
    List a team's currently-active (in-progress) meetings. Parabol GraphQL: viewer.team(teamId).activeMeetings. Requires TEAMS_READ + MEETINGS_READ.

    Annotations the server declares

    • title: List active meetings
    • readOnlyHint: true
  • list_meetingsList past/ongoing meetings for one or more teams (Relay connection), newest first.No findings

    Why it is in this group

    • The name "list_meetings" says "list": a word for reading.
    Description, as the server wrote it
    List past/ongoing meetings for one or more teams (Relay connection), newest first. `teamIds` is required. `meetingTypes` defaults to all four (retrospective, action, poker, teamPrompt). `before` bounds the window (defaults to now); paginate older with `after`. Parabol GraphQL: viewer.meetings. Requires MEETINGS_READ.

    Annotations the server declares

    • title: List meetings (history)
    • readOnlyHint: true
  • list_organization_usersList the users in an organization (Relay connection): each org-user's role, joinedAt, tier, and underlying user (preferredName, email).No findings

    Why it is in this group

    • The name "list_organization_users" says "list": a word for reading.
    Description, as the server wrote it
    List the users in an organization (Relay connection): each org-user's role, joinedAt, tier, and underlying user (preferredName, email). Paginate with `first` + `after` (pass the last edge's `cursor`). Parabol GraphQL: viewer.organization(orgId).organizationUsers. Requires ORGS_READ + USERS_READ.

    Annotations the server declares

    • title: List organization users
    • readOnlyHint: true
  • list_organizationsList the organizations the viewer belongs to: id, name, tier, billingTier.No findings

    Why it is in this group

    • The name "list_organizations" says "list": a word for reading.
    Description, as the server wrote it
    List the organizations the viewer belongs to: id, name, tier, billingTier. Parabol GraphQL: viewer.organizations. Requires ORGS_READ.

    Annotations the server declares

    • title: List organizations
    • readOnlyHint: true
  • list_tasksList the viewer's tasks (Relay connection), optionally filtered by team, user, status, archived state, or a text query.No findings

    Why it is in this group

    • The name "list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List the viewer's tasks (Relay connection), optionally filtered by team, user, status, archived state, or a text query. Paginate with `first` + the `after` DateTime cursor. Parabol GraphQL: viewer.tasks. Requires TASKS_READ.

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true
  • list_team_membersList the members of a team, each with role flags (isLead, isOrgAdmin) and the underlying user (preferredName, email).No findings

    Why it is in this group

    • The name "list_team_members" says "list": a word for reading.
    Description, as the server wrote it
    List the members of a team, each with role flags (isLead, isOrgAdmin) and the underlying user (preferredName, email). Parabol GraphQL: viewer.team(teamId).teamMembers. Requires TEAMS_READ.

    Annotations the server declares

    • title: List team members
    • readOnlyHint: true
  • list_teamsList the teams the viewer belongs to, with each team's id, name, orgId, tier, and team lead.No findings

    Why it is in this group

    • The name "list_teams" says "list": a word for reading.
    Description, as the server wrote it
    List the teams the viewer belongs to, with each team's id, name, orgId, tier, and team lead. Parabol GraphQL: viewer.teams. Requires the TEAMS_READ scope.

    Annotations the server declares

    • title: List teams
    • readOnlyHint: true
  • parabol_queryEscape hatch: run an arbitrary Parabol GraphQL QUERY (read-only) against action.parabol.co/graphql with optional variables.No findings

    Why it is in this group

    • The name "parabol_query" says "query": a word for reading.
    Description, as the server wrote it
    Escape hatch: run an arbitrary Parabol GraphQL QUERY (read-only) against action.parabol.co/graphql with optional variables. Mutations are REJECTED — use the dedicated write tools or parabol_graphql for those. Useful for fields not covered by the curated read tools. Requires the matching read scope(s) on your token.

    Annotations the server declares

    • title: Run a GraphQL query (read-only)
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http parabol https://parabol.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__parabol__get_viewer",
      "mcp__parabol__list_teams",
      "mcp__parabol__get_team",
      "mcp__parabol__list_team_members",
      "mcp__parabol__list_organizations",
      "mcp__parabol__get_organization",
      "mcp__parabol__list_organization_users",
      "mcp__parabol__list_meetings",
      "mcp__parabol__get_meeting",
      "mcp__parabol__list_active_meetings",
      "mcp__parabol__list_tasks",
      "mcp__parabol__parabol_query"
    ],
    "ask": [],
    "deny": [
      "mcp__parabol__create_task",
      "mcp__parabol__update_task",
      "mcp__parabol__create_reflection",
      "mcp__parabol__add_comment",
      "mcp__parabol__start_retrospective",
      "mcp__parabol__start_checkin",
      "mcp__parabol__start_team_prompt",
      "mcp__parabol__invite_to_team",
      "mcp__parabol__parabol_graphql"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as parabol. Review it before you use it.