is.team logois.team
MCP Server
AI Agents

MCP Server

Connect Claude, ChatGPT, Cursor, VS Code and any other MCP client to your boards using the Model Context Protocol (MCP). Paste one URL, approve access in your browser, and your AI can read and update your tasks. Available on every plan, including Free.

Connect in 1 minute

Connecting with OAuth is the recommended setup. Your AI client only needs the server URL: it opens is.team in your browser, you choose which workspaces it can use, and the access token is handed over automatically. There is nothing to copy or rotate.

Server URL
https://is.team/mcp
  1. 1

    Add the URL to your AI client

    Pick your client below for the exact steps.

  2. 2

    Sign in and choose workspaces

    Your browser opens is.team. Sign in if asked, select the workspaces the app may use and click Allow.

  3. 3

    Start working

    Ask your AI to list your cards, create tasks or log time. It only sees the workspaces you selected.

Tip

Available on every plan, including Free — no API token needed. Every app you connect is listed in Account Settings → Connected apps, where you can disconnect it anytime (see Connected Apps). Inside is.team, Connect AI client in the team panel or your account menu (top right) walks you through the same steps and confirms when your client has connected.

Claude

claude.ai, Claude Desktop and the mobile apps

  1. 1

    Open Customize → Connectors

    In claude.ai or Claude Desktop, go to Customize → Connectors.

  2. 2

    Add a custom connector

    Click + → Add custom connector, name it "is.team" and paste the server URL. Leave Advanced settings empty, then click Add.

  3. 3

    Connect and approve

    Click Connect, sign in to is.team in the browser window and choose which workspaces Claude can use.

  4. 4

    Turn it on in a chat

    In a conversation, open + → Connectors and switch on is.team. The connector also works in Claude Desktop and the mobile apps.

Open Claude connectors (opens in a new tab)
Server URL
https://is.team/mcp

Info

Claude's Free plan allows one custom connector. On Team and Enterprise, an owner adds it under Organization settings → Connectors first; members then click Connect.

ChatGPT

Developer mode apps on chatgpt.com

  1. 1

    Turn on Developer mode

    In ChatGPT on the web, open Settings → Security and login and turn on Developer mode.

  2. 2

    Create an app

    Go to chatgpt.com/plugins and select the + button to create a developer-mode app.

  3. 3

    Enter the server details

    Name it "is.team", paste the server URL as the MCP server URL and choose OAuth as the authentication.

  4. 4

    Approve in the browser

    Create the app, sign in to is.team and choose which workspaces ChatGPT can use. Then pick is.team from the composer's Developer mode tools.

Open ChatGPT plugins (opens in a new tab)
Server URL
https://is.team/mcp

Info

Developer mode is available on ChatGPT Plus, Pro, Business, Enterprise and Edu, on the web.

Claude Code

Anthropic's coding agent in the terminal

  1. 1

    Add the server

    Run this in your terminal. Add --scope user to make it available in every project.

  2. 2

    Authenticate

    Start Claude Code, run /mcp, select is-team and choose Authenticate. Approve access in the browser window that opens.

Terminal
claude mcp add --transport http is-team https://is.team/mcp
Inside Claude Code
/mcp

Info

Real-time card chat and the background agent need the local agent (stdio package).

Cursor

AI code editor

  1. 1

    Install with one click

    Click Add to Cursor and confirm the install in Cursor.

  2. 2

    Or edit mcp.json

    Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project only).

  3. 3

    Sign in

    When Cursor shows that is-team needs authentication, start the sign-in and approve access to is.team in the browser.

Add to Cursor
~/.cursor/mcp.json
{  "mcpServers": {    "is-team": {      "url": "https://is.team/mcp"    }  }}

VS Code

GitHub Copilot agent mode

  1. 1

    Install with one click

    Click Install in VS Code and confirm in VS Code.

  2. 2

    Or add it manually

    Run MCP: Add Server from the Command Palette and choose HTTP, or add the server to .vscode/mcp.json (workspace) or your user mcp.json (MCP: Open User Configuration).

  3. 3

    Allow sign-in

    When VS Code asks to authenticate with is.team, allow it and approve access in the browser.

Install in VS Code
.vscode/mcp.json
{  "servers": {    "is-team": {      "type": "http",      "url": "https://is.team/mcp"    }  }}

Windsurf

Devin Desktop, formerly Windsurf

  1. 1

    Open the MCP config file

    In the agent panel, open the … menu and choose Open MCP config file (~/.config/devin/mcp_config.json; older Windsurf builds use ~/.codeium/windsurf/mcp_config.json).

  2. 2

    Add is.team

    Add the server under mcpServers. Use the serverUrl key for remote servers.

  3. 3

    Refresh and sign in

    Save, refresh the MCP server list and approve access to is.team in the browser when asked.

~/.config/devin/mcp_config.json
{  "mcpServers": {    "is-team": {      "serverUrl": "https://is.team/mcp"    }  }}

Codex CLI

OpenAI's coding agent in the terminal

  1. 1

    Add the server

    Run codex mcp add, or add the server to ~/.codex/config.toml.

  2. 2

    Sign in

    Run codex mcp login is-team and approve access in the browser.

Terminal
codex mcp add is-team --url https://is.team/mcpcodex mcp login is-team
~/.codex/config.toml
[mcp_servers.is-team]url = "https://is.team/mcp"

Gemini CLI

Google's agent in the terminal

  1. 1

    Add the server

    Run gemini mcp add, or add it to ~/.gemini/settings.json with the httpUrl key (url is for SSE servers).

  2. 2

    Sign in

    Start Gemini CLI, run /mcp auth is-team and approve access in the browser.

Terminal
gemini mcp add --transport http is-team https://is.team/mcp
~/.gemini/settings.json
{  "mcpServers": {    "is-team": {      "httpUrl": "https://is.team/mcp"    }  }}
Inside Gemini CLI
/mcp auth is-team

Other MCP client

Any client with Streamable HTTP and OAuth

  1. 1

    Paste the server URL

    Add a remote (Streamable HTTP) MCP server with this URL. Clients that support MCP OAuth open a browser to approve access — no token needed.

  2. 2

    No OAuth support?

    Create an API token under Advanced and send it as an Authorization: Bearer header.

Server URL
https://is.team/mcp
Typical JSON config
{  "mcpServers": {    "is-team": {      "url": "https://is.team/mcp"    }  }}

What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants connect to external tools and data sources. Instead of copying prompts and pasting API responses, your AI agent talks directly to is.team — reading your tasks, creating new ones, and managing your workflow.

Remote server or local agent?

is.team runs the MCP server for you at https://is.team/mcp — that's what the guides above connect to. The optional local agent (@isteam/mcp) runs on your machine and adds the full toolset, real-time card chat and a background daemon.

FeatureRemote serverLocal agent
How you connectPaste the URL and approve in the browser (OAuth). An API token also works.Run the setup wizard with an API token. Needs Node.js.
ClientsClaude (web, desktop, mobile), ChatGPT, Claude Code, Cursor, VS Code, Windsurf, Codex CLI, Gemini CLI and any Streamable HTTP clientStdio clients. Real-time features need Claude Code.
Tools17 — cards, tasks, comments, time logs, notes and canvas110+ — adds boards, members, invites, sprints, worklogs, attachments, notifications and integrations
Real-time card chat (subscribe_card, chat_respond, ask_chat)NoYes in Claude Code
Integration tools (GitHub, Drive, Slack, Figma, Calendar)NoYes
Background daemonNoYes macOS and Linux
PlansAll plansAll plans
Best forEveryday work from any AI clientCoding agents that live on a card and pick up tasks on their own

Tip

Our recommendation: start with the remote server — it takes a minute and works in every client. Add the local agent when you want Claude Code to answer in a card's chat or work through tasks in the background.

What the remote server exposes (17 tools)

If a tool is not in this list, it needs the local agent. See Available Tools for what each one does.

  • list_cards
  • read_card
  • create_task
  • update_task
  • complete_task
  • move_task
  • add_comment
  • log_time
  • reorder_tasks
  • create_note
  • update_note
  • create_edge
  • delete_edge
  • create_stack
  • add_to_stack
  • dissolve_stack
  • move_node

API Token (Advanced / CI)

Use an API token when a browser sign-in isn't possible: CI pipelines, headless scripts, MCP clients without OAuth support, and the local agent. API tokens are available on every plan.

  1. 1

    Open Account Settings → API

    Click your avatar in the top-right corner, choose Account (Account Settings) and open the API tab.

  2. 2

    Name the token and choose workspaces

    Give the token a name you'll recognize later and select the workspaces it may reach.

  3. 3

    Generate and copy

    Click Generate and copy the ist_… token. It is shown only once.

  4. 4

    Send it as a Bearer header

    Use one of the snippets below and replace ist_xxx with your token.

Claude Code
claude mcp add --transport http is-team https://is.team/mcp --header "Authorization: Bearer ist_xxx"
mcp.json (Cursor and most JSON-configured clients)
{  "mcpServers": {    "is-team": {      "url": "https://is.team/mcp",      "headers": {        "Authorization": "Bearer ist_xxx"      }    }  }}
Test with curl
curl -sS -X POST "https://is.team/mcp" \  -H "Authorization: Bearer ist_xxx" \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Warning

Treat tokens like passwords — never commit them or ship them in client-side code. Each user can create up to 10 tokens. A token only reaches workspaces you still belong to, and you can delete it anytime from the API tab.

Local Agent (stdio package)

The @isteam/mcp package runs on your machine and talks to is.team over stdio. It exposes the full toolset (110+ tools), real-time card chat in Claude Code, workspace integrations and an optional background daemon. It signs in with an API token and needs Node.js.

Quick setup

Run this in your project directory:

terminal
npx @isteam/mcp@latest setup

The setup wizard walks you through connecting your project:

  1. Checks Claude CLI and Node.js
  2. Asks for your API token
  3. Writes an .mcp.json entry and permission allowlist for this project
  4. Asks for a 6-character agent name (e.g. LAPTP1, DEV001, HOME01) so you can tell terminals apart in the is.team dashboard
  5. Asks whether to run in background daemon mode. Answer no for a normal stdio MCP that stays alive only while the terminal is open. Answer yes to install a launchd/systemd service that watches a card and auto-executes assigned tasks.

Warning

Paste the token when the wizard asks for it rather than passing it on the command line, so it stays out of your shell history. The wizard writes the token into .mcp.json — add that file to .gitignore so it is never committed.

Tip

You can also click the agent badge slot on any card header to open a setup dialog with a ready-to-copy command.

Manual configuration

Prefer to edit the config yourself? Add the package to Claude Code:

terminal
claude mcp add is-team -e IST_API_TOKEN=ist_xxx -- npx -y @isteam/mcp

Other stdio clients (Claude Desktop, Cursor, Windsurf) take the same entry in their JSON config. They get the full toolset, but only Claude Code receives real-time task and chat notifications.

mcp.json
{  "mcpServers": {    "is-team": {      "command": "npx",      "args": [        "-y",        "@isteam/mcp"      ],      "env": {        "IST_API_TOKEN": "ist_xxx"      }    }  }}

Environment variables

  • IST_API_TOKEN (required) — your ist_ API token
  • IST_BASE_URL (optional) — defaults to https://is.team

Warning

Real-time subscriptions require an experimental flag. The local package uses Claude Code's experimental channel notifications to deliver real-time task and chat updates, so you may see a warning about "development channels" — this is expected. The subscribe_card and chat_respond tools rely on this feature. Without it, the local package works but real-time notifications aren't delivered — poll with read_card instead.

Background Daemon

Daemon mode runs Claude as a persistent background service on your machine. It watches a single card — any task dragged or created on that card is picked up automatically, processed by a headless claude --print subprocess, and the result is posted back to the card chat. The daemon survives terminal closure, auto-restarts on crash, and stays invisible to everyone except through the is.team UI.

Info

The daemon is a superset of the local agent. Platform support: macOS (launchd) and Linux (systemd user). Windows is not supported for daemon mode.

Setup

Re-run the setup wizard and answer yes when it asks about background mode:

terminal
npx @isteam/mcp@latest setup

The daemon prompts add three extra steps after the regular wizard:

  1. Card selector — pick the card the daemon should watch. Only tasks added to this card trigger Claude. Everything else is ignored.
  2. Permission mode for the spawned Claude subprocess:
    • acceptEdits — auto-approve file edits, prompt for shell commands (recommended)
    • bypassPermissions — fully autonomous, no prompts (risky, only for trusted cards)
    • plan — planning mode only, no writes
  3. Working directory — the path Claude runs in (defaults to the project directory).

Config is written to ~/.isteam/daemon.json, the service is installed and started, and the card shows an agent badge matching the 6-character label you chose.

How task dispatch works

  1. The daemon subscribes to the card via Firestore and sets a baseline of existing tasks (never acts on what's already there).
  2. When a new task arrives, it's queued and dispatched one at a time (no parallel spawning).
  3. Claude is spawned with claude --print --permission-mode <mode> and a prompt that instructs it to read_card, work the task, then call complete_task.
  4. Tasks have a 30-minute timeout. On success, failure, or timeout, the daemon posts a summary back to the card chat via chat_respond.
  5. Use ask_chat from within the agent to ask the user questions — they see it in the card chat, not the terminal.

Stopping the daemon

The daemon has two stop paths, depending on whether you want it gone or just paused:

  • From the is.team UI — click the agent badge on the card and confirm removal. The daemon detects the unassignment, cleans up its session and presence, and exits cleanly. launchd/systemd respect the clean exit and don't restart it. Run daemon start later or re-run the setup wizard to bring it back.
  • From the CLI — use daemon stop to pause or daemon uninstall to remove the service entirely.

Management commands

CommandDescription
npx @isteam/mcp daemon statusShow service state, PID, config summary, and log paths
npx @isteam/mcp daemon logs --followTail daemon stdout + stderr in real time
npx @isteam/mcp daemon startStart the service (if stopped)
npx @isteam/mcp daemon stopStop the service without removing it
npx @isteam/mcp daemon restartRestart the service (picks up config changes)
npx @isteam/mcp daemon install(Re-)install the launchd/systemd unit from ~/.isteam/daemon.json
npx @isteam/mcp daemon uninstallStop and remove the service unit (config stays)

Warning

One daemon watches one card. To run agents on multiple cards at once, install the daemon on separate machines (or containers) with different agent names. Re-running setup on the same machine overwrites the previous daemon's config.

Real-time Subscriptions

Use subscribe_card to watch a card for new tasks in real time. When a task is created or dragged into the card, the AI agent receives an instant notification — no polling needed.

output.txt
"Subscribe to my task card and start working on any new tasks that appear."

The subscription uses Firestore real-time listeners with a 2-second settlement delay to filter out drag pass-throughs. Only tasks that remain on the card after the delay trigger a notification.

Info

Real-time subscriptions need the local agent running in Claude Code. The remote server is stateless and can't hold a listener open, and other clients (Claude Desktop, Cursor, Windsurf, VS Code, ChatGPT) don't receive the notifications. They can still read and update cards — poll with read_card instead.

Start Claude Code with the channel

Launch Claude Code with the local MCP server attached as a development channel:

terminal
claude --dangerously-load-development-channels server:is-team

This starts Claude Code with the local is-team MCP server attached as a persistent channel, so it receives real-time task notifications. Then ask the agent to subscribe to a card.

Live Chat

When an AI agent subscribes to a card, the card's built-in chat switches to MCP mode. Team members can talk directly to the agent from the is.team UI — no terminal or IDE required.

How it works

  1. The agent calls subscribe_card — the card's chat indicator turns amber and shows "Claude (MCP)".
  2. A team member types a message in the card chat. The message is saved to Firestore and forwarded to the subscribed agent as a chat_message notification.
  3. The agent reads the message (optionally using chat_history for context), then replies with chat_respond.
  4. The reply appears instantly in every team member's chat window. A "Claude is thinking..." indicator shows while waiting for the agent's response.
  5. When the agent calls unsubscribe_card, the chat reverts to the default AI Card Assistant mode.

Example conversation

output.txt
Agent: "Subscribe to Claude's Card and respond to chat messages."  → Agent calls subscribe_card (card turns amber)[Team member in is.team UI]:  "Create a task for fixing the login bug"  → Agent receives chat_message notification  → Agent calls create_task + chat_respond[Agent reply in chat]:  "Done! Created task #42 — Fix login bug (priority: high)"

Chat tools

ToolParametersDescription
chat_respondcardId, contentSend a reply in the card chat. Appears as "Claude (MCP)".
ask_chatcardId, question, type, options?Ask an interactive question (text/options/confirm). The user's answer arrives as a chat notification.
chat_historycardId, limit?Fetch up to 100 recent messages for context (default 30).

Info

Live chat requires the local agent in Claude Code and an active subscription. The agent must call subscribe_card first — without it, chat messages are handled by the built-in AI Card Assistant instead.

Tip

If the agent disconnects or doesn't respond within 60 seconds, the UI automatically shows an error message. The chat reverts to normal mode once the subscription ends.

Available Tools

The remote server — what OAuth-connected apps use — exposes 17 tools for cards, tasks, comments, time logs and the canvas. The local agent exposes 110+: everything below, including board/card CRUD, members & invites, sprints, comments, worklogs, attachments, notifications, real-time subscriptions and workspace integrations. Tools marked Local only need the local agent. Integration tools also need the service connected in Workspace Settings → Integrations. Rate limit: 120 calls per minute per token.

Task Management & Canvas

ToolDescriptionAvailability
list_cardsDiscover all cards you can access — IDs, titles, workspacesRemote + Local
read_cardRead card as markdown — tasks, details, notes, connectionsRemote + Local
create_taskCreate a new task with title, type, priority, and moreRemote + Local
update_taskUpdate any task field — set to null to clearRemote + Local
complete_taskMark a task as done, get move suggestionsRemote + Local
move_taskMove a task to a connected cardRemote + Local
add_commentAdd a comment to any taskRemote + Local
log_timeRecord a worklog entry — duration, description, dateRemote + Local
reorder_tasksReorder tasks — provide task numbers in desired orderRemote + Local
create_noteCreate a canvas note with markdown content. Use nearNodeId to position next to a card and auto-connect.Remote + Local
update_noteUpdate a note's title, content (markdown), or colorRemote + Local
create_edgeConnect two canvas nodes with a directional edge. Specify sourceHandle/targetHandle (top, right, bottom, left) to control connection points.Remote + Local
delete_edgeRemove a connection (edge) between two canvas nodesRemote + Local
move_nodeMove a canvas node (card or note) to a new x/y positionRemote + Local
create_stackGroup multiple notes into a stack — visually collapsed into a single nodeRemote + Local
add_to_stackAdd one or more notes to an existing stackRemote + Local
dissolve_stackDissolve a stack, restoring all notes as independent nodesRemote + Local
subscribe_cardGet real-time notifications when new tasks appear on a cardLocal only
unsubscribe_cardStop listening to a cardLocal only
chat_respondSend a message in the card's live chat as the AI agentLocal only
ask_chatAsk an interactive question in the card chat (text input, multiple choice, or yes/no) and wait for the user's answerLocal only
chat_historyFetch recent chat messages from a card (up to 100)Local only

Boards & Cards Local only

Full board lifecycle and kanban card (column) CRUD. delete_board cascades through nodes + edges. update_card_settings tunes auto-assign, auto-label, auto-archive and the AI automation prompt evaluated when tasks enter the card.

ToolDescriptionNotes
list_boardsList boards in a workspace (visibility-aware)read
create_boardCreate a new board (name + icon + visibility)—
update_boardRename, change icon/visibility/allowed members, set budget—
delete_boardPermanently delete board + every card/note/edge inside itOwner only
create_cardAdd a kanban card (column) to a board—
update_cardTitle, color, icon, llmAccess, llmFlow, llmComment, llmContext—
update_card_settingsautoAssignee, autoReporter, autoDueDays, maxActiveTasks, autoArchive, autoLabel, notifyOnEnter, autoMoveStale, aiAutomation + aiAutomationPrompt—
delete_cardDelete card and connected edges; tasks inside are removed—
list_notesList notes on a board with id, title, color, hasEdges. orphansOnly=true for cleanup.read
delete_noteDelete a note + connected edges—
delete_taskPermanently remove a task (prefer archived=true via update_task to keep history)—
restore_taskSet archived=false on a task—
list_all_tasksList every task on a card (active or active+archived)read
list_archived_tasksArchived tasks onlyread
batch_move_nodesMove up to 200 canvas nodes in one call (positions map)—
batch_delete_nodesDelete up to 200 nodes + connected edges—

Members, Invites & Subscribers Local only

Workspace membership lifecycle: invite by email, change roles with last-owner protection, edit profiles (hourlyRate is owner-only), and manage per-task subscribers for notifications.

ToolDescriptionNotes
list_membersuid, displayName, email, role, jobTitle for every memberread
invite_membersSend bulk invitations (email + jobTitle? + role?). Email + in-app notification.Seat-limit checked
list_pending_invitesUnaccepted/unrevoked invites with token, expiryread
revoke_inviteMark a pending invite as revokedOwner only
update_member_rolePromote/demote member ↔ owner. Last-owner protection enforced.Owner only
remove_memberRemove a member from the workspaceOwner only
update_member_profileEdit jobTitle (self/owner) or hourlyRate (owner only)—
add_task_subscriberSubscribe a member to a task's updates—
remove_task_subscriberRemove a subscriber—
list_task_subscribersList subscribers (uid + displayName + email)read

Comments, Worklog & Attachments Local only

Full comment lifecycle, flexible worklog queries by task / member / date range, and attachment management bound to the workspace file library.

ToolDescriptionNotes
list_commentsComments on a task (newest first)read
update_commentEdit comment text. Activity-log rows can't be edited.Author/owner
delete_commentDelete a commentAuthor/owner
list_worklogsFilter by task / uid / dateFrom / dateToread
get_worklogSingle worklog by IDread
update_worklogChange duration, description, or dateAuthor/owner
delete_worklogDelete a worklog entryAuthor/owner
get_active_timerCurrently-running timer for a member (own if uid omitted)read
list_filesWorkspace file library (mimeFilter, search, cursor)read
delete_fileDelete file from storage + Firestore recordUploader/owner
add_task_attachmentAttach an existing file to a task—
remove_task_attachmentDetach a file from a task (file is kept)—
list_task_attachmentsAttachments on a taskread

Sprints & Subtasks Local only

Agile sprint lifecycle (PLANNING → ACTIVE → COMPLETED) with snapshot generation on completion. Subtask hierarchy via paired parentTask and subtaskRefs updates.

ToolDescriptionNotes
create_sprintCreate with name + dates + goal? (max 90 days)—
update_sprintEdit name, goal, dates, status—
complete_sprintMark COMPLETED + auto-snapshot (totalTasks, completedTasks, totalStoryPoints, completedStoryPoints, carriedOverTaskIds)—
list_sprintsAll sprints for a board, newest firstread
get_active_sprintCurrent ACTIVE sprint (or active=false)read
add_subtaskLink two tasks parent ↔ child (same board, any cards)—
remove_subtaskUnlink subtask—
list_subtasksShow parentTask + subtaskRefs of a taskread

Notifications, Forms (RO) & Settings Local only

Read & manage caller-only notifications, inspect forms and submissions (read-only — form CREATE/UPDATE/DELETE land in v3.1), tune workspace settings, and manage the caller's own preferences.

ToolDescriptionNotes
list_notificationsCaller's own notifications (unread by default)read
mark_notification_readMark as readRecipient only
delete_notificationDelete a notificationRecipient only
list_formsForms in workspace, optionally filtered by board/cardread
get_formFull form definition (fields, settings, count)read
list_form_submissionsSubmissions for a form (paginated)read
get_workspace_settingsname, timezone, currency, hoursPerDay, plan, storageread
update_workspace_settingsEdit metadataOwner only
get_user_preferencesCaller's timezone, emailNotifications, canvasSettingsread
update_user_preferencesUpdate caller's own prefs (self-only)—

Workspace Integrations Local only

AI agents can interact with your connected services. Use list_integrations to discover which services are available in a workspace. Integration tools require the local agent and are not available on the remote server.

ToolDescriptionService
list_integrationsList all connected integrations for a workspace—
GitHub — Repositories
github_list_reposList repositories connected to workspaceGitHub
github_create_repoCreate a new repositoryGitHub
github_update_repoUpdate repo name, description, visibilityGitHub
GitHub — Issues
github_search_issuesSearch issues in a repositoryGitHub
github_create_issueCreate a new issueGitHub
github_close_issueClose an issueGitHub
GitHub — Pull Requests
github_search_prsSearch pull requests in a repositoryGitHub
github_create_prCreate a pull requestGitHub
github_merge_prMerge a PR (merge, squash, or rebase)GitHub
github_close_prClose a PR without mergingGitHub
GitHub — Code
github_get_fileRead file contents from a repositoryGitHub
github_create_branchCreate a new branchGitHub
Google Drive — Files
drive_search_filesSearch files in connected DriveGoogle Drive
drive_get_fileGet file metadata and embed URLGoogle Drive
drive_create_docCreate a Google Docs documentGoogle Drive
drive_create_sheetCreate a Google Sheets spreadsheetGoogle Drive
drive_update_fileRename a file or update its descriptionGoogle Drive
drive_delete_fileDelete a file or folderGoogle Drive
Google Drive — Folders
drive_create_folderCreate a folderGoogle Drive
drive_move_fileMove a file to a different folderGoogle Drive
Slack — Channels
slack_list_channelsList available channelsSlack
slack_create_channelCreate a new channel (public or private)Slack
slack_update_channelRename, set topic or purposeSlack
slack_archive_channelArchive a channelSlack
Slack — Messages
slack_send_messageSend a message to a channelSlack
slack_send_thread_replyReply in a message threadSlack
slack_get_channel_historyRead recent messages from a channelSlack
Figma
figma_get_fileGet file metadata, pages, and thumbnailFigma
figma_get_commentsRead comments on a Figma fileFigma
figma_post_commentPost a comment on a Figma fileFigma
Google Calendar
calendar_list_eventsList upcoming calendar eventsGoogle Calendar
calendar_get_eventGet details of a specific eventGoogle Calendar
calendar_create_eventCreate a new calendar eventGoogle Calendar
calendar_update_eventUpdate an existing eventGoogle Calendar
calendar_delete_eventDelete a calendar eventGoogle Calendar

Access Control

Access is granted per workspace, not per card. When you approve an app on the consent screen or create an API token, you choose the workspaces it can reach — every board and card in those workspaces is available to its tools.

  • Tools act as you. They can only do what your workspace role allows — owner-only tools stay owner-only.
  • Access follows your membership. If you leave a workspace or are removed from it, connected apps and tokens lose access to it within a minute.
  • OAuth tokens are short-lived. Access tokens expire after an hour and are refreshed automatically; refresh tokens rotate on every use.
  • Real-time access needs the local agent. Real-time card chat signs in with an ist_ API token. Apps connected through the consent screen can call tools, but their tokens are refused for real-time access.
  • Failures come back as tool errors. A call that can't run — for example, on a card in a workspace you didn't select — returns a result with isError: true and a message your AI can read.
  • Revoke anytime. Disconnect an app in Account Settings → Connected apps or delete a token in Account Settings → API to cut access immediately.

Permission Configuration

When running AI agents with Claude Code, you can control exactly which tools the agent is allowed to use — so it never asks for permission in the terminal. This is especially useful for headless or autonomous workflows.

Permission Modes

Set the agent's overall permission behavior with --permission-mode:

ModeBehaviorBest for
defaultAsks before edits and bash commandsInteractive work
acceptEditsAuto-approves file edits, still asks for bashCode iteration
planRead-only, no edits or executionExploration
autoAuto-approves safe actions, blocks risky onesLong autonomous tasks
bypassPermissionsSkips all permission promptsIsolated containers only

Tool Allow / Deny Rules

Use --allowedTools and --disallowedTools to pre-approve or block specific tools without interactive prompts:

terminal
# Pattern syntaxRead                          # All file readsEdit                          # All file editsBash(npm *)                   # npm commands onlyBash(git commit *)            # git commit onlymcp__is-team__*               # All is.team MCP toolsmcp__is-team__read_card       # Specific tool onlyWebFetch(domain:github.com)   # Domain-specific

Example Configurations

Read-only agent (safe):

terminal
claude -p "Check my tasks and summarize" \  --allowedTools "mcp__is-team__list_cards,mcp__is-team__read_card,Read"

Task management agent:

terminal
claude -p "Fix this bug and update the task" \  --allowedTools "mcp__is-team__*,Read,Edit,Bash(npm *)" \  --disallowedTools "Bash(rm *),Bash(git push *)"

Fully autonomous agent:

terminal
claude -p "Work through all sprint tasks" \  --permission-mode auto \  --allowedTools "mcp__is-team__*,Read,Edit,Bash" \  --disallowedTools "Bash(rm *),Bash(git push --force *)" \  --max-turns 50

Headless CI/CD:

terminal
claude --bare \  -p "Run tests and report results" \  --permission-mode bypassPermissions \  --allowedTools "Bash(npm test),Read,mcp__is-team__add_comment" \  --output-format json \  --max-turns 10

Persistent Rules (settings.json)

Save permission rules permanently in your .claude/settings.json so they apply to every session:

data.json
{  "permissions": {    "allow": [      "mcp__is-team__read_card",      "mcp__is-team__list_cards",      "Read"    ],    "deny": [      "Bash(rm *)",      "Bash(curl * | bash)"    ]  }}

Info

Rule priority: deny → ask → allow. A deny rule at any level always wins — no flag or setting can override it.

Additional Control Flags

FlagDescription
--max-turns NLimit the number of agentic loops
--max-budget-usd X.XXSet a cost limit in USD
--output-format json|textControl response format
--bareSkip hook/skill/MCP discovery (faster for scripts)
--continueResume a previous session

Troubleshooting

My client says it needs authentication (401)

Access tokens last an hour and your client refreshes them on its own. A 401 that doesn't go away means the refresh failed — for example, you disconnected the app, left every workspace you selected, or didn't use it for 30 days. Reconnect: in Claude or ChatGPT, open the connector and click Connect; in Claude Code, run /mcp and choose Authenticate; in Codex CLI, run codex mcp login is-team; in Gemini CLI, run /mcp auth is-team. Using an API token? Check that it still exists in Account Settings → API. Also check the server URL is exactly https://is.team/mcp — older configs pointing at /api/mcp can't complete the sign-in.

Sign-in keeps failing with mcp-remote

Older setups bridge the remote server through mcp-remote, which caches OAuth state on disk. Clear the cache and restart your client:

terminal
rm -rf ~/.mcp-auth

Most clients now connect to remote servers natively — if yours does, switch to the URL setup for your client.

Tools I expected are missing

The remote server has 17 tools. Board, member, sprint, worklog, attachment, notification, real-time chat and integration tools need the local agent.

A workspace doesn't show up

Apps only see the workspaces you selected on the consent screen. Disconnect the app in Account Settings → Connected apps and connect again to change the selection. For API tokens, create a new token that includes the workspace.

429 Too Many Requests

Each token can make 120 calls per minute. Wait for the number of seconds in the Retry-After header — most clients retry automatically.

The browser didn't switch back to my app

After you click Allow, desktop apps such as Cursor, VS Code and Claude Code are opened through a link. If your browser asks for permission to open the app, allow it. The confirmation page also has a link to open the app again.

Corporate networks and proxies

Both your browser and your AI client must reach https://is.team, including /mcp, /.well-known/, /oauth/ and /api/oauth/. Proxies that strip the Authorization header, block streaming responses or inspect TLS with their own certificate can break the connection. Node-based clients may need your company's CA certificate via NODE_EXTRA_CA_CERTS.

Tip

The cardId is passed as an argument to each tool call — use list_cards to find it. You can work with multiple cards in the same MCP session.

© 2026 IS.TEAM LLC. All rights reserved.