BoardMark

Issue board for teams: let your AI agent find, create and move issues, run Scrum sprints, comment and keep project docs, with your own permissions (OAuth).

Hosted MCP Server

npx add-mcp 'https://mcp.boardmark.ai/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

How do I connect an AI agent to BoardMark?

Add BoardMark as an MCP server and sign in through your browser — no token to copy. Or use a personal access token for CI and machines without a browser. The agent works with exactly your rights — only your projects, never admin.

user parity — never admin

Send one link to any AI assistant

The guide for AI agents is one Markdown file: what BoardMark is, how to use it step by step, the rules, prices and the FAQ. Paste the link into ChatGPT, Claude, Gemini, Copilot or any other assistant and it can help you use BoardMark right away, with or without MCP. If the assistant supports MCP, the guide also shows it how to connect.

Guide for AI agents

https://www.boardmark.ai/agents.md

Or paste this message

Guide for AI agents

Read https://www.boardmark.ai/agents.md and help me use BoardMark.

Open the guide (agents.md)

  1. Add BoardMark as an MCP server

    In Claude Code, run (Streamable HTTP) — no token needed: Claude CodeCopy

    claude mcp add --transport http boardmark https://mcp.boardmark.ai/mcp
    
  2. Sign in and choose the company

    Claude Code opens your browser to sign in to BoardMark and choose the company the agent works in. (If no browser opens, run /mcp in Claude Code and pick this server to sign in.) Each sign-in is for one company.

  3. See and revoke it any time

    Signed-in apps are listed on the Agent & MCP access page of the web app. Sign one out and it loses access immediately. Open the web app

  4. Create a token in the app

    On Agent & MCP access, create a new token, name it and pick 30, 90, 180 or 365 days. Tokens start with board_pat_ and are shown once — store it somewhere safe. Revoke it any time.

  5. Keep the token in an environment variable

    Never put the token in a file you commit to git. shellCopy

    export BOARDMARK_TOKEN="board_pat_…"
    
  6. Add the MCP server with the header

    For Claude Code: Claude CodeCopy

    claude mcp add --transport http boardmark https://mcp.boardmark.ai/mcp --header "Authorization: Bearer $BOARDMARK_TOKEN"
    

    Or add it to the project's.mcp.json (Claude Code expands ${BOARDMARK_TOKEN} from the environment): .mcp.jsonCopy

    {
      "mcpServers": {
        "boardmark": {
          "type": "http",
          "url": "https://mcp.boardmark.ai/mcp",
          "headers": {
            "Authorization": "Bearer ${BOARDMARK_TOKEN}"
          }
        }
      }
    }
    
  • Claude Code
  • Claude Desktop
  • claude.ai
  • OpenAI Codex CLI
  • ChatGPT
  • Google Antigravity
  • Gemini CLI
  • xAI Grok
  • Goose
  • OpenCode
  • Cursor
  • VS Code (GitHub Copilot)
  • Windsurf
  • Kiro
  • Zed
  • Cline
  • Continue
  • LM Studio
  • Mistral Le Chat
  • Microsoft Copilot Studio

Clients that can only run local (stdio) servers connect through mcp-remote.

MCP setup for every client (connect.md)

Let your agent set itself up

Paste this into the agent — it reads the guide and follows the steps for the client it is running in:

Prompt for your agent

Connect yourself to BoardMark: read https://mcp.boardmark.ai/connect.md and follow the steps for the client you are running in.
  • Every write sends a version — always call get_issue before update_issue. If someone changed it first you get 409 version_conflict instead of an overwrite.
  • They read the project docs first — get_project says which docs to read first (docs.read_first), or get_docs_context returns the brief, working notes and open handoffs in one text. The company's and project's rules there come before BoardMark's defaults (the user's instruction comes first), so a team writes its rules once and every agent follows the same ones.
  • They know the three board types — Scrum has sprints (several may run at once), Kanban and Delivery pipeline have none, and a pipeline's statuses follow the environments in project.md.
  • On Scrum, people start sprints — an agent changes status only for issues in a sprint a person has started (otherwise 409 sprint_not_started) and cannot start a sprint itself; it can still plan the backlog, comment and edit other fields.
  • They follow the board's columns — get_project gives each column's category, colour, WIP limit and meaning (Premium companies customise columns in the web app); agents follow the meaning and treat a WIP limit as a warning. 403 plan_required means the feature needs the Premium plan — a company admin upgrades in the web app.
  • Every write is recorded — issue and doc history shows whose rights, which AI client (for example “via Claude Code”), OAuth or token, which MCP tool and a request id; in the app, agent cards, comments and uploads are badged, and requests BoardMark refused go to the company's Audit log.
  • 600 requests/minute per token — by default.
  • Agents are not seats — they use the rights of the user who connected them and cost nothing extra.

Projects & my work

ToolWhat it does
list_projectsProjects you can access, optionally with an overview (open issues, running sprints and their progress) in one call
list_my_issuesIssues assigned to you across every project, in one call
get_projectproject.md: board type and template, statuses with each column's category, colour, WIP limit and meaning, custom field definitions, saved filters, workflow, environments, your role, and on Scrum sprint_control (admins or members: who can press Start sprint)

Issues

ToolWhat it does
search_issuesSearch by status, assignee, sprint, type, priority, label, text (title, description or issue key, whole or part), parent, custom fields (fields), template flags (flag, such as overdue or off_track) and issues linked to a key (linked_to=KEY-n); sort by priority or a field (paginated)
get_issueRead an issue with its current version, computed field values (computed, such as score and progress) and its live linked targets (linked: key, title, status or a release's state + progress; readable: false when you have no access)
create_issueCreate an issue (one.md file), with the template's custom field values (fields)
update_issueChange any number of fields in one call, custom fields included (fields key by key, null clears) — requires version
delete_issueDelete an issue — requires version
transition_issueMove to another status (including each environment's statuses on a pipeline) — on Scrum only for issues in a sprint a person has started, else 409 sprint_not_started
rank_issueOrder an issue (before/after another)
assign_issueSet the assignee
list_peopleWho can open the project, with names and roles — name the reporter or assignee and find ids to @mention (via: "company" marks people in through company-wide access)
list_watchersWho watches an issue, and whether you do
watch_issueWatch an issue to get emails on status changes and new comments
unwatch_issueStop watching an issue
link_issuesLink issues (blocks, relates, duplicates, clones) — takes the key of another project in the same company, and delivers to a release with id KEY/R-n (403 link_target_forbidden, 404 release_not_found)
unlink_issuesRemove a link

Comments & attachments

ToolWhat it does
list_commentsComments on an issue, with reply threads
add_commentAdd a Markdown comment or reply to one — mention people with [@Name](mention:usr_…) — ids from list_people (only project members are emailed); you then watch the issue
update_commentEdit your own comment — requires version
delete_commentDelete a comment (leaves “This comment was deleted”, replies stay) — requires version
request_uploadGet a presigned upload URL
attach_fileAttach an uploaded file to an issue — show an image inline with![name](path) (no base64)
list_attachmentsAn issue's attachments: name, size, date and uploader
delete_attachmentDelete an attachment for good — only files this same token uploaded; links in the description and comments then show “file deleted”
get_download_urlPresigned download URL for an attachment

Sprints

ToolWhat it does
list_sprintsSprints of a project (several may be active)
create_sprint*Create a sprint
update_sprint*Rename a sprint or change its dates or goal
move_to_sprintMove issues into or out of a sprint
start_sprint*Start a sprint — people only: an agent token gets 403, so ask the user to press Start sprint in the app
close_sprint*Close a sprint and move unfinished work
get_burndownSprint burndown (Scrum)

Releases

ToolWhat it does
list_releasesReleases of a project with their readiness (not ready · ready with risks · ready), worked out from the board by fixed rules
get_releaseOne release: each feature's status with its reasons, the numbers and the gate result — agents report them as returned, never guess
move_to_releasePut an issue (or an epic with its children) into a release or take it out, with a reason — creating, gating and shipping a release are for people in the app

The md tree

ToolWhat it does
read_fileRead an.md file
write_fileWrite an.md file through the same validator as the UI
list_dirList files in the md tree
get_historyCommit history: who changed what, and through which agent token
diffDiff two versions

Project docs

ToolWhat it does
list_docsThe project's brief, working notes, handoffs and the company brief, with what to read first (read_first)
get_docs_contextEverything to read before starting work, the template and its fields explained, as one Markdown text
get_docRead a doc (or an older version) with its current version
create_docCreate a brief, working notes, or a handoff to teams or the whole project
update_docEdit a doc, or close/reopen a handoff — requires version
delete_docDelete a doc (restorable from its history) — requires version
get_doc_historyEvery saved version: who saved it, through which agent, and when
restore_doc_versionBring back an older version as a new one (history is kept)
acknowledge_handoffAcknowledge a handoff addressed to you; the writer is told

Help from the BoardMark team

ToolWhat it does
list_support_casesYour company's support cases (every member sees them), newest activity first
get_support_summaryHow many cases wait for you and how many are open
open_support_caseOpen a case when the user needs help or hits a problem with BoardMark itself (not their project's issues) — text only
get_support_caseRead a case with its whole thread, including the BoardMark team's replies
reply_support_caseReply in a case (text only; attachments on the web)
close_support_caseClose a case when the problem is solved
reopen_support_caseReopen a closed case (within 30 days)
follow_support_caseFollow a case to get emails when the team answers
unfollow_support_caseStop following a case

MCP resources

  • board://{project_key}/project.md
  • board://{project_key}/issues/{key}
  • board://{project_key}/docs
  • board://{project_key}/docs/{kind}/{slug}
  • project_context (prompt)

* requires project_admin

What can an agent never do?

MCP has no admin or billing tools at all. These stay in the web app, for the people whose role allows them:

usersteamsseatspermissionsbillingcreating projectsproject settings & environmentsstarting sprintsimporting from Jiradeleting projects or the companymoving projects to another companydeleting accountsproject webhookstwo-step sign-in & signed-in devicesprofile pictures

How do I connect an AI agent to BoardMark?

Add BoardMark as an MCP server in your AI client (Claude Code, Codex, Gemini CLI, Cursor, VS Code and more), then sign in through your browser and choose the company — no token to copy. For CI or machines without a browser, create a personal access token in the app and send it as the header Authorization: Bearer <token>. Setup for each client is on the MCP page (/mcp), or let the agent read the connect.md guide and set itself up.

Can AI agents follow our team's own workflow?

Yes. BoardMark has defaults for what each status means (for example In Review = QA is testing, Dev Done = waiting to be deployed for QA, Test Rejected = QA failed it) and for which part of the flow each role — developer, QA, BA — moves. If your team works differently, write company rules in the company brief and project rules in the project's brief or working notes. Agents always read those docs before they start and follow the most specific rule: the user's instruction > the project's docs > the company brief > the defaults. Your team writes its rules once, and every agent — Claude, ChatGPT, Codex, Cursor or any MCP client — works within the same agreed frame, more accurately, instead of being told again in every chat. Details: /docs/boards.

Can an agent safely edit an issue someone else is editing?

Yes. Every write sends the version of the file it read. If someone changed it first, the server answers 409 version_conflict instead of overwriting, so agents should always call get_issue before update_issue.

How do I see what an agent changed?

Every change an agent makes over MCP is recorded in the issue or doc history: whose rights it used, which AI client (the name you approved when connecting with sign-in, or the name you gave a personal access token), OAuth or token, which MCP tool made the call (for example update_issue), and a request id tying together everything one call changed. Issue history shows it as “via Claude Code”; cards and attachments changed or uploaded by an agent carry a badge, and the Agent & MCP page lists your agents' recent commits. Company admins can filter the Audit log to what was done through an AI agent, and requests BoardMark refused (no permission, or a rule) appear as “An AI agent was refused”.

Is there a rate limit?

Yes — 600 requests per minute per token by default.

Can I stop an AI agent from doing QA's job?

BoardMark warns it; it does not block. Every column has a lane — the role that works in that status (In Review = QA, for example) — and an agent gets a role on its token or on the approve screen when it connects. If a Developer agent moves In Review → Done, or skips the QA step, the move still happens but the agent gets a warning to stop, tell the user and hand off with a comment. Issue history shows the agent's role and a ⚠ on moves outside its lane. People are never warned or blocked.