I'mBoardDocs
Guides

MCP — install & tool reference

Install the I'mBoard MCP server in Claude Code, Claude Desktop, Cursor, Cline, and other MCP-aware clients. Includes the full live tool catalog.

I'mBoard ships an MCP (Model Context Protocol) server that wraps the I'mBoard REST API and gives any MCP-aware AI client — Claude Code, Claude Desktop, Cursor, Cline, and others — direct access to your boards, meetings, documents, reports, dashboards, ontology, and knowledge graph through natural language.

This page is install + reference. Each section is independent — jump to your client of choice and copy the snippet, then come back for the tool catalog and workflow examples.

API vs CLI vs MCP

ApproachBest For
REST API (curl, SDK)Custom integrations, CI/CD, programmatic access
CLIQuick lookups, scripting, agent workflows, terminal power users
MCP server (Claude/Cursor/Cline/…)Interactive exploration, ad-hoc queries, AI-assisted workflows

All three speak to the same API using the same personal access token.


1. Get a token

The MCP server authenticates with an I'mBoard API token. There are two kinds, and which one you pick changes what the agent can reach:

TokenPrefixIdentityReachUse for
Personal access token (PAT)imb_pat_Acts as youEvery board you can access, plus your profile and portfolioYour own agent across all your boards
Board access token (BAT)imb_bat_A board service principal — no user identityA single board only, read-only by defaultA scoped, single-board agent (e.g. a read-only reporting bot, a shared board assistant, a CI job)

Rule of thumb: if the agent only needs one board and should not be able to touch anything else, use a BAT. If you want an agent that acts as you across all your boards, use a PAT. See Board tokens vs personal tokens below for the full comparison and the downstream proof.

Personal access token (PAT)

  1. Open I'mBoard and navigate to Account → API Access.
  2. Click Create Token.
  3. Name it after the client (e.g. claude-desktop, cursor) so you can revoke per-client later, and choose the shortest expiry that fits your use case.
  4. Copy the token immediately — it starts with imb_pat_ and is only shown once.

Board access token (BAT)

A BAT is minted from the board's own settings (not your account), so its lifecycle belongs to the board rather than to you. It is pinned to that one board, carries the Board read only scope preset by default, and has no access to your profile, your other boards, or portfolio data.

  1. Open the board and go to Board settings → Access tokens. (Only board owners and admins can create tokens; other members see the list read-only.)
  2. Click Create board access token and name it after the agent (e.g. acme-reporting-bot).
  3. Choose a scope preset — Read only (default) or Read & write (read + write this board; never create/delete boards) — and an expiry.
  4. Copy the imb_bat_… token immediately — like a PAT, it is only shown once.

Use it anywhere this guide says IMBOARD_API_TOKEN (see the snippets below — just swap the imb_pat_ value for your imb_bat_ value). For the full BAT vs PAT contract, scoping rules, and minting walkthrough, see Authentication → Board Access Tokens.


2. Install per client

Pick your client. Every snippet uses the same npm package (@imboard.ai/mcp-server) over stdio transport. The only thing that changes between clients is where you paste the config.

Claude Code

Add to your project's .mcp.json (or to ~/.claude/settings.json under mcpServers for global access):

{
  "mcpServers": {
    "imboard": {
      "command": "npx",
      "args": ["-y", "@imboard.ai/mcp-server"],
      "env": {
        "IMBOARD_API_BASE_URL": "https://app.imboard.ai",
        "IMBOARD_API_TOKEN": "imb_pat_YOUR_TOKEN"
      }
    }
  }
}

Restart Claude Code (or reload MCP servers). Verify:

"List my I'mBoard boards."

Claude should call list_boards and return your boards.

Claude Desktop

Edit claude_desktop_config.json (location: Settings → Developer → Edit Config, or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "imboard": {
      "command": "npx",
      "args": ["-y", "@imboard.ai/mcp-server"],
      "env": {
        "IMBOARD_API_BASE_URL": "https://app.imboard.ai",
        "IMBOARD_API_TOKEN": "imb_pat_YOUR_TOKEN"
      }
    }
  }
}

Fully quit Claude Desktop (Cmd-Q on macOS — closing the window is not enough) and relaunch. Verify by typing in any chat:

"List my I'mBoard boards."

The hammer icon at the bottom of the input should show imboard as an available server.

Cursor

Create .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global access):

{
  "mcpServers": {
    "imboard": {
      "command": "npx",
      "args": ["-y", "@imboard.ai/mcp-server"],
      "env": {
        "IMBOARD_API_BASE_URL": "https://app.imboard.ai",
        "IMBOARD_API_TOKEN": "imb_pat_YOUR_TOKEN"
      }
    }
  }
}

Open Settings → MCP in Cursor to confirm imboard is listed and toggled on. Verify in the Composer or chat panel:

"List my I'mBoard boards."

Cline (VS Code extension)

Open the Cline extension's MCP settings (click the server icon in the Cline sidebar, then Edit MCP Servers) and add:

{
  "mcpServers": {
    "imboard": {
      "command": "npx",
      "args": ["-y", "@imboard.ai/mcp-server"],
      "env": {
        "IMBOARD_API_BASE_URL": "https://app.imboard.ai",
        "IMBOARD_API_TOKEN": "imb_pat_YOUR_TOKEN"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Cline reloads MCP servers automatically. Verify with the same prompt:

"List my I'mBoard boards."

Continue, Goose, and other clients

Continue (~/.continue/config.json) and Goose (~/.config/goose/config.yaml) both support MCP servers with the same shape — command, args, env. Use the Claude Desktop snippet above as a template and adapt to the client's config syntax.

These configurations are community-contributed and not currently verified end-to-end by the I'mBoard team. If a snippet doesn't work for your client, please file an issue with the client name and version.

ChatGPT Apps

Coming soon — pending GA of the ChatGPT Apps platform for third-party MCP servers.


3. Auto-discovery via .well-known/mcp.json

For MCP-aware clients and directories (Smithery, the Anthropic MCP directory, etc.) that support auto-configuration, I'mBoard publishes a discovery manifest at a stable, unauthenticated URL:

curl https://app.imboard.ai/.well-known/mcp.json | jq .

The manifest follows the RFC 8615 .well-known/ URI convention and lists:

  • name, displayName, description, version — server identity
  • transport — install command (npx -y @imboard.ai/mcp-server) and the env vars the client must set (IMBOARD_API_BASE_URL, IMBOARD_API_TOKEN)
  • tools — the full live catalog of MCP tools (auto-generated from the same route registry as the section below — never hand-maintained)
  • links — deep links to install pages for common clients and to this documentation

Clients that consume .well-known/mcp.json can configure the I'mBoard server without users editing JSON by hand. The manifest is cached by the CDN (5 min browser, 15 min edge) and refreshes on every deploy.


Board tokens (BAT) vs personal tokens (PAT)

The MCP server forwards your IMBOARD_API_TOKEN to the API as a bearer token and is completely token-type-blind — it never inspects the imb_pat_ / imb_bat_ prefix. That means a board access token works through every read tool with no configuration change beyond the token value itself. Choosing the right token is purely a permissions decision:

Personal access token (PAT)Board access token (BAT)
Prefiximb_pat_imb_bat_
Minted fromAccount → API AccessBoard settings → Access tokens (owners/admins)
IdentityActs as youService principal — no user; get_me / list_my_boards are out of scope
Board reachEvery board you can accessExactly one board — the board it was minted on
Other boardsVisibleNot-found (existence is not even leaked)
Default permissionsYou choose Read-only or Full accessRead-only preset by default
Cross-board / portfolioget_portfolio_data available with portfolio:readNever — portfolio and other-board data are unreachable
Lifecycle ownerYouThe board

When to use a BAT:

  • A read-only reporting or analytics agent that should only ever see one board.
  • A shared assistant that several board members use, where you do not want it acting as any one person.
  • A CI job or automation that prepares one board's pack and must be incapable of touching anything else.

When to use a PAT:

  • A personal agent that should roam across all the boards you belong to.
  • Any workflow that needs your profile, your notifications across boards, or portfolio-level aggregation.

A BAT is read-only by default and board-scoped at the auth layer. Even if a tool that writes (or a tool on a different board) is invoked, the API rejects it — a write tool returns FORBIDDEN, and a tool aimed at any board other than the token's board returns not-found. You cannot accidentally over-grant a BAT by pointing an agent at the wrong tool.

Configure the MCP server with a BAT

Identical to any client snippet above — only the token value changes:

{
  "mcpServers": {
    "imboard-acme-board": {
      "command": "npx",
      "args": ["-y", "@imboard.ai/mcp-server"],
      "env": {
        "IMBOARD_API_BASE_URL": "https://app.imboard.ai",
        "IMBOARD_API_TOKEN": "imb_bat_YOUR_BOARD_TOKEN"
      }
    }
  }
}

Name the server after the board (e.g. imboard-acme-board) so it's obvious in the client which board the agent is scoped to.

Downstream proof — verify a BAT is board-scoped

This is a repeatable check that the board token does what it claims: it reads its own board and is blind to every other one. Run it after minting a BAT (use a disposable token and revoke it afterward).

  1. Find two board IDs — the board your BAT is minted on (OWN_BOARD_ID) and any other board ID (OTHER_BOARD_ID). With a PAT you can list them: curl https://app.imboard.ai/api/v1/boards -H "Authorization: Bearer $YOUR_PAT" | jq '.data[].id'.

  2. Export the disposable BAT:

    export BAT="imb_bat_YOUR_BOARD_TOKEN"

    Confirm what the token is before you go further — whoami echoes the board it is pinned to:

    curl -s https://app.imboard.ai/api/v1/whoami -H "Authorization: Bearer $BAT" | jq '{authType, boardId, boardName}'
    # → { "authType": "board_token", "boardId": "OWN_BOARD_ID", "boardName": "Acme Inc." }
  3. Read the token's own board — expect 200 with data:

    curl -s -o /dev/null -w '%{http_code}\n' \
      https://app.imboard.ai/api/v1/boards/OWN_BOARD_ID/meetings \
      -H "Authorization: Bearer $BAT"
    # → 200
  4. Read a different board with the same token — expect 404 (not-found, not 403):

    curl -s -o /dev/null -w '%{http_code}\n' \
      https://app.imboard.ai/api/v1/boards/OTHER_BOARD_ID/meetings \
      -H "Authorization: Bearer $BAT"
    # → 404  (board existence is deliberately not leaked)
  5. In the MCP client itself, configure the server with the BAT (snippet above) and ask:

    "List the meetings for board OWN_BOARD_ID."

    The agent calls list_board_meetings and returns the meetings. Then ask it to list meetings for OTHER_BOARD_ID — it gets a not-found error and cannot see that board.

  6. Revoke the disposable token when you're done.

If step 4 returns 200 instead of 404, the token is not board-scoped — stop and report it. The MCP server requires no code change for any of this: it forwards the bearer token and surfaces the API's response unchanged. (This contract is locked by an automated test in the MCP server package: tests/api-client/bat-downstream-proof.test.ts.)


Tool reference

The I'mBoard MCP server exposes every API endpoint flagged for AI consumption. Tools are organized by domain. Each row shows the tool name, the HTTP verb + path on the underlying REST API, and the API token scope required when authenticating with a personal access token (JWT sessions bypass scope checks).

Auto-generated from the route registry at build time. 140 tools across 29 domains.

Action Items

ToolMethodPathScopeDescription
create_action_itemPOST/boards/:boardId/meetings/:meetingId/action-itemsboards:writeCreates an action item on a meeting. Requires board collaborator access. Items created via an API token are attributed to the agent.
list_my_action_itemsGET/api/action-items/myboards:readLists action items assigned to the authenticated user across all boards
update_action_item_statusPATCH/api/action-items/:actionItemId/statusboards:writeUpdates an action item status (in_progress, completed, cancelled)

Agent Chat

ToolMethodPathScopeDescription
get_agent_conversationGET/boards/:boardId/sections/:sectionName/chatboards:readGet the active agent conversation history for a board section, including messages and extracted data so far.
send_agent_messagePOST/boards/:boardId/sections/:sectionName/chatboards:writeSend a message to the board section agent. The agent helps fill section data through conversation, using persona dossiers and schema knowledge. Returns the agent reply and any extracted field values.
submit_agent_dataPOST/boards/:boardId/sections/:sectionName/chat/submitboards:writeSubmit the data extracted by the agent as a section submission. The agent must have extracted data via conversation before this can be called.

Audit Log

ToolMethodPathScopeDescription
get_board_audit_logGET/api/auditlog/:boardIdaudit:readGets the audit trail for a board

Board Cycles

ToolMethodPathScopeDescription
capture_post_meetingPOST/boards/:boardId/cycles/:cycleId/post-meetingcycles:writeCapture post-meeting data (minutes, action items, commitments) and transition cycle to post_meeting status. Supports manual entry and AI-extracted sources.
clear_section_stalenessPOST/boards/:boardId/cycles/:cycleId/sections/:sectionName/clear-stalenesscycles:writeClear staleness flags on a section. Pass an optional rogueIds array to clear only matching flags; omit to clear all. Used for the explicit "reviewed, still correct" action.
compile_board_packagePOST/boards/:boardId/cycles/:cycleId/compilecycles:writeCompile all submitted sections into a board package with KPI dashboard, validation results, commitment tracking, and previous action items.
create_board_cyclePOST/boards/:boardId/cyclescycles:writeCreate a new board prep cycle. Requires title, cadence, and meetingDate. Auto-generates timeline and section assignments from the board schema.
create_commitmentPOST/boards/:boardId/cycles/:cycleId/commitmentscycles:writeCreate a commitment tied to a board cycle. Commitments are surfaced in future cycles for follow-up tracking.
delete_board_cycleDELETE/boards/:boardId/cycles/:cycleIdcycles:writeDelete a board prep cycle. Only cycles in draft or cancelled status can be deleted.
delete_commitmentDELETE/boards/:boardId/commitments/:commitmentIdcycles:writeDelete a commitment.
dismiss_validation_flagPATCH/boards/:boardId/validation-flags/:flagIdcycles:writeDismiss or explain a validation flag. Set status to "dismissed" (no explanation needed) or "explained" (with explanation that becomes documentation).
dispatch_board_cyclePOST/boards/:boardId/cycles/:cycleId/dispatchcycles:writeDispatch a board prep cycle — notify section owners of their assignments, link previous submissions, and transition cycle to active. Sections with no assigned owner are skipped.
distribute_post_meeting_minutesPOST/boards/:boardId/cycles/:cycleId/post-meeting/distributecycles:writeDistribute post-meeting minutes to all board members via notification. Cycle must be in post_meeting status.
get_board_cycleGET/boards/:boardId/cycles/:cycleIdcycles:readGet a single board prep cycle by ID, including timeline milestones and section assignment statuses.
get_cycle_progressGET/boards/:boardId/cycles/:cycleId/progresscycles:readGet progress summary for a board prep cycle — who's submitted, who hasn't, stats, next deadline, and cross-section dependency warnings.
get_cycle_stalenessGET/boards/:boardId/cycles/:cycleId/stalenesscycles:readGet cross-section staleness state for a board cycle. Returns which sections have shared rogueIds whose values are stale because a sibling section updated them, plus the per-section shared-KPI map for the editor UI.
get_post_meeting_summaryGET/boards/:boardId/cycles/:cycleId/post-meetingcycles:readGet post-meeting summary for a cycle: minutes, action items, and commitments created.
get_validation_flagsGET/boards/:boardId/cycles/:cycleId/validation-flagscycles:readGet cross-section validation flags for a cycle. Optionally filter by status (open, dismissed, explained).
list_board_cyclesGET/boards/:boardId/cyclescycles:readList board prep cycles for a board. Optionally filter by status (draft, active, collecting, etc.).
list_commitmentsGET/boards/:boardId/commitmentscycles:readList all commitments for a board. Optionally filter by status (open, in_progress, completed, missed, deferred).
run_cross_validationPOST/boards/:boardId/cycles/:cycleId/validatecycles:writeRun cross-section validation for a board prep cycle. Compares shared KPIs across sections and flags discrepancies (e.g., Finance ARR vs Sales ARR).
send_cycle_remindersPOST/boards/:boardId/cycles/:cycleId/remindcycles:writeSend reminder notifications to section owners who haven't submitted yet. Returns count of reminders sent and skipped.
update_board_cyclePATCH/boards/:boardId/cycles/:cycleIdcycles:writeUpdate a board prep cycle (title, cadence, meetingDate, timeline overrides). Changing meetingDate recalculates the timeline.
update_board_cycle_statusPATCH/boards/:boardId/cycles/:cycleId/statuscycles:writeTransition a board prep cycle to a new status. Only valid transitions are allowed (e.g., draft → active → collecting).
update_commitmentPATCH/boards/:boardId/commitments/:commitmentIdcycles:writeUpdate a commitment — status, outcome, gap explanation, target date, or owner.
update_section_assignment_statusPATCH/boards/:boardId/cycles/:cycleId/assignments/:assignmentId/statuscycles:writeUpdate the status of a section assignment within a board prep cycle (not_started → in_progress → submitted → reviewed → final).

Board Schemas

ToolMethodPathScopeDescription
adopt_rogue_kpiPOST/boards/:boardId/schema/adoptboards:writeAdopt a Rogue KPI into a board schema section. Pins the rogueId and sets a custom label.
create_custom_kpiPOST/boards/:boardId/schema/custom-kpiboards:writeCreate a custom KPI — simultaneously adds it to Rogue as a draft and to the board schema.
get_board_schemaGET/boards/:boardId/schemaboards:readGet the data schema for a specific board.
list_board_schema_versionsGET/boards/:boardId/schema/versionsboards:readList version history for a board schema.
update_board_schemaPUT/boards/:boardId/schemaboards:writeReplace the board schema with a new set of sections and fields.

Board User Unregistered

ToolMethodPathScopeDescription
archive_board_user_unregisteredPOST/boards/:boardId/unregistered-members/:id/archiveboards:writeSoft-delete an unregistered member (sets status to "archived"). Reversible via unarchive. Hard delete is a separate admin action.
create_board_user_unregisteredPOST/boards/:boardId/unregistered-membersboards:writeCreate an unregistered member record on a board. Unregistered members exist as data only — they never receive a session, login, or scoped URL (#1260 architectural principle). Requires displayName; email, board_position, and notes are optional.
dismiss_board_user_unregistered_bounce_flagPOST/boards/:boardId/unregistered-members/:id/dismiss-bounce-flagboards:writeDismiss the persistent-bounce flag on an unregistered member (#1286). Hides the warning in the roster but keeps the underlying flag history. A new qualifying SendGrid bounce/dropped/spam_report/unsubscribe event will resurrect the flag with a fresh flaggedAt timestamp.
list_board_user_unregisteredGET/boards/:boardId/unregistered-membersboards:readList unregistered members on a board. Optional ?status=active|archived|all (default active). Promoted records (with promotedToUserId set) are always excluded.
scrub_board_user_unregisteredPOST/boards/:boardId/unregistered-members/:id/scrubboards:writeData-deletion-on-request: PII-scrub an unregistered member. Replaces displayName with "[Deleted]", clears email/notes, empties board_position, sets status to archived, and locks the record from future edits. Historical KG references stay resolvable but no longer expose PII. Irreversible — to add a fresh record, create a new unregistered member.
unarchive_board_user_unregisteredPOST/boards/:boardId/unregistered-members/:id/unarchiveboards:writeRestore an archived unregistered member (sets status back to "active"). Idempotent on records that are already active.
update_board_user_unregisteredPATCH/boards/:boardId/unregistered-members/:idboards:writeUpdate an unregistered member (displayName, email, board_position, notes). At least one field must be provided. displayName cannot be cleared. Pass null to clear email, board_position, or notes.

Boards

ToolMethodPathScopeDescription
assign_member_rolesPUT/api/board/:boardId/members/:userId/rolesboards:writeAssigns roles, positions, and access types to a board member
create_boardPOST/api/boardboards:writeCreates a new board, optionally with company context
get_boardGET/boards/:boardIdboards:readReturns details for a specific board
list_board_action_itemsGET/api/board/:boardId/action-itemsboards:readLists action items for a board (open/in-progress by default)
list_boardsGET/boardsboards:readLists boards the authenticated user has access to
search_board_documentsPOST/api/board/:boardId/searchboards:readSemantic search across all documents in a board
update_boardPUT/api/board/:boardIdboards:writeUpdates board details (name, description, settings)
update_board_action_itemPATCH/api/board/:boardId/action-items/:actionItemIdboards:writeUpdates action item status (in_progress, completed, cancelled)

Documents

ToolMethodPathScopeDescription
create_documentPOST/api/documents/:boardId/documents:writeCreates a new document with an initial version
create_document_versionPOST/api/documents/:boardId/:documentId/versiondocuments:writeCreates a new version of a document
delete_documentDELETE/api/documents/:boardId/:documentId/documents:writeDeletes a document from a board
get_documentGET/boards/:boardId/documents/:documentIddocuments:readReturns details for a specific document
list_board_documentsGET/boards/:boardId/documentsdocuments:readLists documents for a board
update_documentPUT/api/documents/:boardId/:documentId/documents:writeUpdates document details (title, meeting associations, working copy link)
update_document_statusPUT/api/documents/:boardId/:documentId/statusdocuments:writeChanges document status (draft, review, approved, etc.)

FX

ToolMethodPathScopeDescription
get_fx_ratesGET/api/fx/ratesportfolio:readGets current foreign exchange rates

Invites

ToolMethodPathScopeDescription
accept_invitePUT/api/invite/accept/:boardInviteIdinvites:writeAccepts a board invite
create_invitePOST/api/invite/:boardIdinvites:writeInvites a user to a board by email
decline_invitePUT/api/invite/decline/:boardInviteIdinvites:writeDeclines a board invite
list_board_invitesGET/api/invite/:boardId/invitesinvites:readLists pending invites for a board
retract_invitePUT/api/invite/retract/:boardInviteIdinvites:writeRetracts a sent board invite

KG

ToolMethodPathScopeDescription
get_board_prep_briefGET/boards/:boardId/kg/prep-briefboards:readGet a board preparation brief from the knowledge graph: graph health, governance advisories grouped by status (open/dismissed/snoozed/resolved) with per-rule display strings, open textual contradictions, director question patterns, and narrative themes. Pass ?include=users for a self-contained payload with name + position resolution. Requires advisory audience access (default: ceo, cfo, chief of staff) or board owner.
get_knowledge_graph_summaryGET/boards/:boardId/kg/summaryboards:readGet knowledge graph index stats for a board: node counts by type, edge count, health metrics (open contradictions, open questions, stale commitments), governance coverage gaps, dropped topics, compiled summary, and recent ingestion history. Requires board admin or internal management role.
get_open_itemsGET/boards/:boardId/kg/open-itemsboards:readGet open items from the knowledge graph. Filter by type: "contradictions" (conflicting data across sources), "questions" (unanswered or deferred director questions), or "commitments" (approved/proposed decisions pending follow-up). Omit type to get all. Requires board admin or internal management role.
query_knowledge_graphPOST/boards/:boardId/kg/queryboards:readAsk a natural language question against the board knowledge graph. The system retrieves relevant graph data (contradictions, decisions, questions, topics, themes, KPI mentions) and synthesizes an answer using an LLM. Requires board admin or internal management role.

KG Advisory

ToolMethodPathScopeDescription
get_governance_advisoriesGET?boards:readList KG governance advisories for a board. Returns all statuses by default; use ?status=, ?ruleType=, ?limit=, ?offset= to filter. Requires audience access (default: ceo, cfo, chief of staff).
get_governance_advisory_runsGET?boards:readList recent KG governance advisory review runs for a board (paginated, newest first). Audit/retro surface.
run_governance_advisory_reviewPOST?boards:writeTrigger a KG governance advisory review pass for a board. Returns immediately with the review ID. A 60s soft check returns the in-flight review if one already started in the last minute.

Me

ToolMethodPathScopeDescription
get_meGET/meuser:readReturns the authenticated user profile

Meeting Creation Suggestions

ToolMethodPathScopeDescription
accept_meeting_creation_suggestionPOST/boards/:boardId/meeting-creation-suggestions/:suggestionId/acceptmeetings:writeAccepts a suggestion and creates a finalized meeting from extracted document data
dismiss_meeting_creation_suggestionPATCH/boards/:boardId/meeting-creation-suggestions/:suggestionIdmeetings:writeDismisses a meeting creation suggestion
list_board_meeting_creation_suggestionsGET/boards/:boardId/meeting-creation-suggestionsmeetings:readLists pending meeting creation suggestions for a board (from document intelligence)
list_document_meeting_creation_suggestionsGET/boards/:boardId/documents/:documentId/meeting-creation-suggestionsmeetings:readLists pending meeting creation suggestions for a specific document

Meetings

ToolMethodPathScopeDescription
change_meeting_statusPUT/api/meetings/:boardId/:meetingId/statusmeetings:writeChanges meeting status (draft, planned, scheduled, completed, finalized)
create_meetingPOST/boards/:boardId/meetingsmeetings:writeCreates a new meeting on a board
delete_meetingDELETE/api/meetings/:boardId/:meetingId/meetings:writeDeletes a meeting
get_meetingGET/boards/:boardId/meetings/:meetingIdmeetings:readReturns details for a specific meeting
list_board_meetingsGET/boards/:boardId/meetingsmeetings:readLists meetings for a board with filtering by status and date range
update_meetingPATCH/boards/:boardId/meetings/:meetingIdmeetings:writeUpdates an existing meeting

Members

ToolMethodPathScopeDescription
get_board_memberGET/boards/:boardId/members/:memberIdboards:readReturns details for a specific board member
list_board_membersGET/boards/:boardId/membersboards:readLists members of a board

Merge Recommendations

ToolMethodPathScopeDescription
accept_merge_recommendationPOST/boards/:boardId/merge-recommendations/:recommendationId/acceptdocuments:writeAccepts a merge recommendation — moves source versions to target and deletes the standalone entry
dismiss_merge_recommendationPATCH/boards/:boardId/merge-recommendations/:recommendationIddocuments:writeDismisses a merge recommendation
list_board_merge_recommendationsGET/boards/:boardId/merge-recommendationsdocuments:readLists pending merge recommendations for a board (version detection suggestions)
list_document_merge_recommendationsGET/boards/:boardId/documents/:documentId/merge-recommendationsdocuments:readLists pending merge recommendations for a specific document

Notifications

ToolMethodPathScopeDescription
list_notificationsGET/api/notification/notifications:readLists notifications for the authenticated user
mark_all_notifications_readPUT/api/notification/read/allnotifications:writeMarks all notifications as read
mark_notification_readPUT/api/notification/read/:notificationIdnotifications:writeMarks a single notification as read

Organizational Functions

ToolMethodPathScopeDescription
create_organizational_functionPOST/boards/:boardId/functionsfunctions:writeCreate a new organizational function on a board. Requires name, slug, and optionally owner, members, ownedKpis, ownedSections.
delete_organizational_functionDELETE/boards/:boardId/functions/:slugfunctions:writeDelete an organizational function from a board.
get_organizational_functionGET/boards/:boardId/functions/:slugfunctions:readGet a single organizational function by its slug (e.g., "finance", "sales").
list_organizational_functionsGET/boards/:boardId/functionsfunctions:readList all organizational functions for a board. Functions map people to KPIs and schema sections.
seed_default_organizational_functionsPOST/boards/:boardId/functions/seed-defaultsfunctions:writeSeed the 7 default organizational functions (Finance, Sales, HR, R&D, Product, Legal, Operations) for a board with default KPI ownership from the Rogue catalog. Idempotent — skips functions that already exist.
update_organizational_functionPATCH/boards/:boardId/functions/:slugfunctions:writeUpdate an organizational function. Supports partial updates: name, description, owner, members, ownedKpis, ownedSections.

Orgs

ToolMethodPathScopeDescription
get_org_portfolioGET/orgs/:orgId/portfolioportfolio:readRead a monitoring org's portfolio of boards (up to 5) as one values-dense payload of CURRENT board signals — counts and values only, never board content. Pass detail="full" for the broad per-board projection (metrics, fundraising stage, cadence, member counts) or "summary" for the lean table view. Read-only.

Persona Dossiers

ToolMethodPathScopeDescription
get_persona_dossierGET/boards/:boardId/dossiers/:functionSlugboards:readGet a per-persona dossier for a board function (e.g., finance, sales, hr, r-and-d). Returns a markdown document with section overview, field-by-field guidance, data acquisition hints, and common pitfalls — designed to guide an LLM in helping the persona fill their board section.

Portfolio

ToolMethodPathScopeDescription
get_portfolio_dataGET/api/portfolio/dataportfolio:readGets portfolio data aggregated across all boards

Reports

ToolMethodPathScopeDescription
create_dashboardPOST/api/reports/:boardId/:reportId/dashboardsreports:writeCreates a custom dashboard in a report
create_dashboard_versionPOST/api/reports/:boardId/:reportId/dashboards/:dashboardId/versionsreports:writeCreates a new version of a dashboard
create_followup_reportPOST/api/reports/:boardId/:reportId/followupreports:writeCreates a follow-up report from an existing report
create_reportPOST/api/reports/:boardIdreports:writeCreates a new report for a board
get_board_feedbackGET/api/reports/:boardId/:reportId/board-feedbackreports:readGets board-level feedback on a report
get_dashboardGET/boards/:boardId/reports/:reportId/dashboards/:dashboardIdreports:readReturns details for a specific dashboard
get_dashboard_chatGET/api/reports/:boardId/:reportId/dashboards/:dashboardId/chatreports:readGets discussion comments on a dashboard
get_historical_metricsGET/api/boards/:boardId/historical-metricsreports:readGets historical KPI data for a dashboard
get_metrics_comparisonGET/api/boards/:boardId/metrics-comparisonreports:readCompares metrics across time periods
get_reportGET/boards/:boardId/reports/:reportIdreports:readReturns details for a specific report
get_report_auditGET/api/reports/:boardId/:reportId/audits/:auditIdreports:readGets details of a specific report audit
get_report_fullGET/boards/:boardId/reports/:reportId/fullreports:readReturns the entire board pack in one call: report metadata plus every dashboard’s latest normalized KPI content (all types — cash, sales, customers, pipeline, fundraising, HR, product, and custom narrative) and deterministic data-quality flags. Use this instead of fetching dashboards one by one.
get_uniform_dashboardsGET/api/reports/:boardId/:reportId/uniform-dashboardsreports:readLists a uniform report's dashboards and their field rogueIds
list_board_reportsGET/boards/:boardId/reportsreports:readLists reports for a board
list_report_auditsGET/api/reports/:boardId/:reportId/auditsreports:readLists audit history for a report
list_report_dashboardsGET/boards/:boardId/reports/:reportId/dashboardsreports:readLists dashboards for a report
post_board_feedbackPOST/api/reports/:boardId/:reportId/board-feedbackreports:writePosts board-level feedback on a report
post_dashboard_chatPOST/api/reports/:boardId/:reportId/dashboards/:dashboardId/chatreports:writePosts a comment on a dashboard
promote_report_statusPUT/api/reports/:boardId/:reportId/promotereports:writePromotes report status (draft -> review -> published)
set_uniform_dashboard_fieldsPUT/api/reports/:boardId/:reportId/uniform-dashboards/:dashboardIdreports:writeSets uniform dashboard field values by canonical rogueId
trigger_report_auditPOST/api/reports/:boardId/:reportId/auditreports:writeTriggers an AI audit of a report
update_dashboard_review_statusPUT/api/reports/:boardId/:reportId/dashboards/:dashboardId/review-statusreports:writeUpdates dashboard review status
update_reportPUT/api/reports/:boardId/:reportIdreports:writeUpdates report details

Rogue Kpis

ToolMethodPathScopeDescription
compare_kpisGET/rogue-kpis/compareCompare two Rogue KPIs side by side. Pass a and b as canonical rogueIds (e.g. a=fundraising.pre_money_valuation, b=fundraising.post_money_valuation). Returns both full enriched payloads (same shape as get_rogue_kpi, including formula, whyItMatters, interpretationGuidance, relatedKpiIds, and benchmark when mapped) plus a derived relationship block: aReferencesB / bReferencesA (true when one KPI cites the other in its formula or relatedKpiIds), sameDomain, and benchmarkOverlap (medians + comparable flag, null when either KPI lacks a benchmark or units differ). Use this tool when reasoning about how two KPIs interact — direct arithmetic links, intent-vs-realized pairs, or cross-domain comparisons.
create_draft_rogue_kpiPOST/rogue-kpisrogue-kpis:writeCreate a new draft Rogue KPI. Used when a company defines a custom KPI not yet in the catalog.
get_rogue_kpiGET/rogue-kpis/*rogueIdGet a single Rogue KPI by its canonical rogueId (e.g., sales.arr). Returns the full definition plus, when populated, structured AI-consumption fields: formula (plain-text calculation), whyItMatters (board-level significance), interpretationGuidance (how to read a value), and relatedKpiIds (cross-KPI links for follow-up reasoning). When present, also returns the agent-safe computation contract: calculationPolicy (inclusion/exclusion/required-input/edge-case/validation rules an agent applies when computing the KPI from messy data) and metricBasis (machine-filterable measurement axes — timeBasis, moneyBasis, dateBasis, cohortBasis, production); both omitted for KPIs without one. Also includes the industry benchmark distribution (p25/median/p75, source, year) by default when the KPI has a mapped benchmark; the field is omitted for unmapped KPIs.
list_rogue_kpisGET/rogue-kpisBrowse the Rogue KPI catalog. Filter by domain, maturity, stage, or free-text search. Each entry includes the canonical definitionSource (published or editorial); when populated, structured AI-consumption fields: formula (plain-text calculation), whyItMatters (what a board reads from it), interpretationGuidance (how to read a value), and relatedKpiIds (other rogueIds it pairs with); and a benchmark distribution (p25/median/p75) when the KPI has a mapped industry reference (omitted otherwise). Rows are LEAN by default — the per-KPI computation contract (calculationPolicy / metricBasis) is NOT included; call get_rogue_kpi for a specific KPI, or pass detail=full to include it on every row (token-heavy on large result sets).

Schema Onboarding

ToolMethodPathScopeDescription
generate_board_schemaPOST/boards/:boardId/schema/generateboards:writeGenerate a board schema from company context. Supports two paths: rogue-template (full generation) and start-lean (selected KPIs only).
get_company_contextGET/boards/:boardId/company-contextboards:readGet the company context (stage, industry, team size, business model, functional leaders) for a board.
put_company_contextPUT/boards/:boardId/company-contextboards:writeSet company context for a board — stage, industry, team size, business model, and which functional leaders exist.

Section Submissions

ToolMethodPathScopeDescription
get_section_submissionGET/boards/:boardId/schema/sections/:sectionName/submissionboards:readGet the latest data submission for a board schema section.
submit_section_dataPOST/boards/:boardId/schema/sections/:sectionName/submitboards:writeSubmit data for a board schema section. Validates against the schema and stores the submission.

Slots

ToolMethodPathScopeDescription
confirm_meeting_slotPOST/boards/:boardId/meetings/:meetingId/slots/:slotId/confirmmeetings:writeConfirms a proposed slot as the meeting scheduled time
create_meeting_slotPOST/boards/:boardId/meetings/:meetingId/slotsmeetings:writeProposes a new time slot for a meeting
delete_meeting_slotDELETE/boards/:boardId/meetings/:meetingId/slots/:slotIdmeetings:writeRemoves a proposed time slot from a meeting
list_meeting_slotsGET/boards/:boardId/meetings/:meetingId/slotsmeetings:readLists proposed time slots with vote tallies for a meeting
vote_on_slotPUT/boards/:boardId/meetings/:meetingId/slots/:slotId/votemeetings:writeCasts or updates a vote on a proposed meeting time slot

Unassigned Attachments

ToolMethodPathScopeDescription
list_unassigned_attachmentsGET/api/unassigned-emails/documents:readLists email attachments awaiting assignment to documents
reject_attachmentPUT/api/unassigned-emails/attachment/:attachmentIddocuments:writeRejects an unassigned email attachment

User

ToolMethodPathScopeDescription
get_storage_usageGET/api/user/storageuser:readReturns storage usage for unassigned email attachments
list_my_boardsGET/api/user/allboardsuser:readLists all board memberships and pending invites for the authenticated user

Example workflows

The MCP server's job is to make agents useful — not to make every API endpoint visible. Three patterns that show up in real chair / CEO / VP-Finance work:

1. Prep the next monthly board package

"For board def456, compile next month's board package: collect the latest dashboard snapshots, list any open commitments still unresolved from last cycle, and surface the top three KPI variances vs. plan. Draft a one-paragraph cover note for the chair."

Behind the scenes the agent typically chains: list_board_cyclesget_board_cyclecompile_board_packagelist_commitmentsget_dashboard for each dashboard referenced → freeform narrative drafting.

2. Draft an investor update from recent KPI changes

"Look at board def456's last two cycle snapshots. Find KPIs that moved more than 15% in either direction. Group by domain. Write a four-paragraph investor update — opening hook, growth highlights, the one number we missed and why, and what we're focused on next month."

Common chain: list_board_cycles → two get_cycle_progress calls → list_board_documents for context → narrative drafting.

3. Audit commitments before the meeting

"Show me every commitment on board def456 that's overdue or due in the next seven days. Group by owner. For each owner, surface the most recent status update and the original target date. Highlight anyone with three or more overdue items."

Common chain: list_commitments with date filtering → get_board_member for each owner.


Troubleshooting

SymptomLikely causeFix
MCP server missing from the client's server listConfig not loadedConfirm the JSON file is at the right path for your client (see install per client). Restart the client fully (Cmd-Q on macOS for Claude Desktop — closing the window is not enough).
UNAUTHENTICATED / 401 error on every callMissing or malformed tokenVerify IMBOARD_API_TOKEN is set in the client's env block and starts with imb_pat_ (personal) or imb_bat_ (board). Token must be in the env of the MCP server config, not in the prompt.
INVALID_API_TOKEN / 403 errorToken expired, revoked, or scoped too narrowlyCreate a fresh token at Account → API Access (PAT) or Board settings → Access tokens (BAT). If the failing tool requires boards:write and your token is read-only, scope it up.
RESOURCE_NOT_FOUND / 404 on a board you know existsUsing a board token (BAT) against a different boardA BAT only reaches the one board it was minted on; every other board reads as not-found. Use that board's token, or a PAT for cross-board work.
FORBIDDEN on a write tool with a board tokenA BAT is read-only by defaultRead-only board tokens cannot call write tools. Mint a read-write BAT, or use a PAT with the matching write scope.
FORBIDDEN on a specific boardInsufficient board membership or access typeCheck your role on the target board. Some tools require Editor or Admin access.
npx -y @imboard.ai/mcp-server hangs or fails to downloadFirewall / corporate proxy blocking npmjs.orgPre-install: npm install -g @imboard.ai/mcp-server, then in the config replace "command": "npx" + "args": ["-y", "@imboard.ai/mcp-server"] with "command": "imboard-mcp-server" and an empty "args": [].
Tool returns stale dataPersonal token has its own cached identity in the agent's processRestart the MCP server (most clients have a "reload servers" command), or restart the client.
Schema or KPI changes not showing upThe client cached the tool list from the previous server versionReload MCP servers in the client. The server reports its tool list on connect; once reconnected, new tools appear.

Security notes

  • Never commit tokens to source control. Use .env files excluded from git, or your OS keychain. Cursor and Cline both support per-workspace env files; Claude Desktop and Claude Code accept env inline in the config — those config files should themselves be outside any tracked repo.
  • Use short-lived, narrowly-scoped tokens. Create one token per tool so you can revoke them independently when a laptop is lost or a contract ends.
  • Audit access regularly. The same Account → API Access page lists every active token with last-used timestamps.

On this page