Developers

Documentation

Groundbook for developers

Everything you can do on the website, you can do from Microsoft Copilot, Claude, ChatGPT, Gemini, Grok, the command line, or your own code. Each connection acts as your account, with exactly your permissions. Connecting an assistant takes about two minutes and needs no technical skills. The command line and API are for developers.

Quickstart

How it works

One MCP server (the standard assistants use to connect to tools) and one REST API sit behind every surface. Most people only need the first row.

SurfaceSign-inUse it from
Hosted MCP serverSign in once and click Allow.Microsoft Copilot, Claude, ChatGPT, Gemini, Grok
Local MCP server (gb mcp)API key (a password for programs)Claude Code, Cursor, Claude Desktop
Command line (gb)API keyTerminals, scripts, CI
REST APIAPI key or OAuth tokenYour own code

Every connection sees only what your account can open on the site. Disconnect an assistant or revoke a key at any time from Connectors.

Connect an assistant

You sign in to Groundbook once and click Allow. After that the assistant can read and update your projects, and only yours, until you disconnect it. Some assistants ask for a server address. It is:

MCP server address
https://app.groundbook.ai/api/mcp

Microsoft Copilot

This is done in Copilot Studio, where Microsoft 365 agents are built. If you cannot open it, ask your Microsoft 365 admin for access.

  1. In Copilot Studio, open your agent, click + next to Tools, choose Add → Model Context Protocol, and paste the address above with a name and description.
  2. For authentication choose OAuth 2.0 → Dynamic (with discovery). Copilot registers itself with us; there is nothing to copy.
  3. Create the connection: sign in and click Allow. Then click Add to attach the tool and Save the agent. Try a question in the Preview pane and allow the first tool calls.

Claude

  1. Open Groundbook in the Claude directory and click Connect to Claude. Or, inside Claude, open Customize → Connectors, click Discover, search for Groundbook, and click Connect.
  2. A Groundbook page opens. Sign in if asked, then click Allow.
  3. Upload your drawings and start a check in Groundbook.
  4. Paste this prompt into a new Claude chat to go through the results:
    Prompt
    Show me the issues Groundbook found on my latest project, most severe first, each with its link, and help me go through them. If its check is still running, tell me how far along it is. If I have no project yet, give me the link to upload my drawings and start a check in Groundbook.
  5. Claude asks before every Groundbook action. To skip the prompts, open Customize → Connectors → Groundbook and set both tool groups to Always allow.

If you cannot find the listing, add it by hand: Customize → Connectors → Add → Custom connector, name it Groundbook, and paste the address above.

ChatGPT

  1. Open Groundbook in ChatGPT and click Install plugin.
  2. Create a Groundbook account, or sign in to your existing account, then click Allow.
  3. Start a new ChatGPT chat, select @Groundbook, and paste this prompt to find the right tool and start your first project:
    First project prompt
    Use Groundbook. In a few lines, tell me what it can do for me, with a link to each: plan review, shop drawing and submittal review, quantity takeoff, Recheck, Smart Overlay, and site plans. Then give me the link to start my first project.

Upload new drawings on the project page ChatGPT links to, then start the check there. Return to ChatGPT to go through the findings.

Already have a project? Connect the same account you use here, then ask:

Existing project prompt
Show me the issues Groundbook found on my latest project, most severe first, each with its link, and help me go through them. If its check is still running, tell me how far along it is. If I have no project yet, give me the link to upload my drawings and start a check in Groundbook.

Gemini

Gemini uses Groundbook in Spark, its agent mode. You need a personal Google account in the US with Google AI Pro or Ultra; Google does not let work or school accounts add apps yet.

  1. Open Connected Apps in Gemini. Under Custom apps for Spark, paste the address above and click Next twice.
  2. Tick the box to accept Google’s notice, click Connect, then Agree and continue.
  3. A Groundbook page opens. Sign in if asked, then click Allow. Back in Gemini, click Connect.
  4. Switch to Spark, type @Groundbook, and ask your question. Gemini asks before each change.

Gemini Enterprise uses Groundbook through an agent. The main chat does not call custom MCP servers yet. First create a client ID and secret. The reply holds client_id and client_secret.

Terminal
curl -X POST https://app.groundbook.ai/api/oauth/register \
  -H "Content-Type: application/json" \
  -d '{"client_name": "Gemini Enterprise", "token_endpoint_auth_method": "client_secret_post",
       "redirect_uris": ["https://vertexaisearch.cloud.google.com/oauth-redirect"]}'
  1. An admin opens Connected apps in Gemini Enterprise settings and adds an MCP server: the address above, OAuth, the client ID and secret, https://app.groundbook.ai/oauth/authorize as the authorization URL, https://app.groundbook.ai/api/oauth/token as the token URL, and read write as the scopes.
  2. Click New agent, then Build manually. Name it Groundbook, tell it to use Groundbook for questions about your projects and issues, turn on Groundbook under Connectors, and click Create. You can upload our logo as its icon.
  3. Open the agent and ask your question. The first time, connect Groundbook and click Allow.

Grok

  1. Open grok.com/connectors, click New Connector, then Custom.
  2. Name it Groundbook, paste the address above as the server URL, and click Add Connector.
  3. A Groundbook window opens. Sign in if asked, then click Allow. Ask your question in any chat.

Grok runs tools without asking first, including ones that change or delete things. To keep it read-only, click Groundbook on the connectors page and turn off the write tools.

On Grok Business or Enterprise, an admin adds it for the team first: in console.x.ai, open Grok Business → Connectors → Add Connector → Other and paste the address.

Try asking

  • “What are the open high-severity issues on my latest project?”
  • “Assign issue 12 to eng@example.com and mark it in progress.”
  • “Export the open issues on 12 Main St as a report.”

Claude Code, Cursor, and other local agents

For developers. Install the CLI, sign in with an API key, and run it as a local MCP server over stdio.

Terminal
npx @groundbook/cli login

Then add it to your agent’s MCP servers:

mcp.json
{
  "mcpServers": {
    "groundbook": {
      "command": "npx",
      "args": [
        "-y",
        "@groundbook/cli",
        "mcp"
      ]
    }
  }
}

Command line

For developers. The gb command runs every tool from a terminal. Create an API key in Connectors → API keys, then sign in once. Output is JSON.

Terminal
npx @groundbook/cli login            # paste an API key from Connectors → API keys
gb list_projects
gb list_issues --project-id PROJECT_ID --severity High --status open
gb get_issue --issue-id ISSUE_ID
gb create_project --address "12 Main St"
gb upload plans.pdf --project PROJECT_ID
gb start_check --project-id PROJECT_ID
gb ask --project-id PROJECT_ID --question "Which sheets have unresolved conflicts?"
gb list_project_overlays --project-id PROJECT_ID
gb create_smart_overlay --document-ids DOC_ID_1,DOC_ID_2

Commands

CommandWhat it does
gb login [--api-key KEY]Save an API key. Asks for it when run in a terminal.
gb logoutForget the saved key.
gb whoamiThe signed-in account.
gb <tool> --flag valueRun any tool. Flags mirror its parameters: gb list_issues --project-id ID --severity High.
gb upload <file.pdf> --project IDAdd a PDF to a draft project. Add --code-name NAME to upload it as a building code.
gb download-export <exportId> [--out FILE]Wait for an export to finish, then save it.
gb api <METHOD> <path> [--data JSON]Call any API route with your key.
gb mcpServe the tools over stdio for a local agent.
gb tools, gb help <tool>List every tool with its flags, or the flags of one tool.

Every tool in the tool list is also a command with the same name. Commands that delete something ask you to confirm; pass --yes in scripts. A read-only key cannot change anything.

Scripts and automation

Set GROUNDBOOK_API_KEY instead of running gb login, and pass --json for one-line output that pipes into jq.

bash
export GROUNDBOOK_API_KEY=gb_...      # no login step needed

PROJECT_ID=$(gb create_project --address "12 Main St" --json | jq -r .projectId)
gb upload plans.pdf --project "$PROJECT_ID"
gb start_check --project-id "$PROJECT_ID"

gb export_issues --project-id "$PROJECT_ID" --format report --json
gb download-export EXPORT_ID --out issues.pdf
gb delete_project --project-id "$PROJECT_ID" --yes

REST API

Every route the website uses accepts an API key, so your own code can do anything the site can. The base URL is https://app.groundbook.ai. Bodies are JSON, ids are UUIDs, and times are ISO 8601 in UTC. The API reference lists each route with its parameters and examples for curl and gb.

Authentication

Create an API key in Connectors → API keys and send it in the Authorization header as a bearer token. A read-only key can call GET routes only. Keys never carry admin powers, and you can revoke one at any time.

curl
curl "https://app.groundbook.ai/api/auth/me" \
  -H "Authorization: Bearer $GROUNDBOOK_API_KEY"
curl
curl "https://app.groundbook.ai/api/checks/CHECK_ID/issues" \
  -H "Authorization: Bearer $GROUNDBOOK_API_KEY"

Errors are JSON with one plain-English error message. The status codes are in the reference.

OAuth for assistants

Assistants authenticate with OAuth 2.1 instead of a key. An access token works on every route in the same way as a key.

WhatValue
MCP endpointhttps://app.groundbook.ai/api/mcp
MCP versions2026-07-28 (no handshake), and 2025-11-25 back to 2025-03-26 (with initialize), over Streamable HTTP
Server metadata/.well-known/oauth-authorization-server
Resource metadata/.well-known/oauth-protected-resource
GrantAuthorization code with PKCE, rotating refresh tokens
Client registrationDynamic. Clients register themselves; no client id or secret to copy.

Tools

The same 37 tools back the hosted MCP server, the local MCP server, and the command line. Each one is an action from the website, with the same permissions.

Read tools

ToolAccessWhat it does
get_meReadThe signed-in account: email, organization, credit balance, a first-project discount or legacy trial credit when it has one, and what Groundbook can do (features, each with where to start it).
list_projectsReadProjects this account can open, newest first. Filter by text (address or file name) and status: draft (not started), processing (check running), ready (issues available, or a takeoff delivered while the review still runs: see review), archived (review stopped).
get_projectReadOne project with its check status and progress, files, review instructions, the language its findings are written in, code sources, and price. Set includeSharing only when the person asks about project access or wants to change sharing.
list_saved_filesReadPDFs and DWGs saved for reuse by this account or its organization, with the projects that already use them, and (in chatUploads) PDFs or DWGs the person uploaded in Microsoft 365 Copilot or Teams chat. Add either kind to a project with add_saved_files_to_project.
list_egnyte_folderReadSubfolders and PDFs in one folder of the person's connected Egnyte. Start at the root and walk down to find the drawings, then add them with import_from_egnyte.
list_issuesReadIssues found on a project, most severe first. Filter by severity, status, discipline, label, file, assignee, overlay, comments, usefulness, or text; leave out every filter the person did not ask for. total is how many match; projectTotal and projectCounts cover the whole project. Each issue has a number, the drawing sheets it cites, its outside sources and code sections, whether a drawing overlay shows it, its Fieldwire task, and a link.
get_issueReadOne issue in full: description, impact, recommended fix, every sheet reference with the cited text and any drawing overlay that shows it, assignees, its Fieldwire task, and comments.
get_exportReadProgress of an export. When ready, the file can be downloaded from the project page's notifications, or with the CLI.
get_fieldwire_sendReadProgress of a send to Fieldwire: how many tasks were created, updated, pinned on a plan, or failed.
list_project_overlaysReadThe drawing comparisons on a project's Overlays tab: two sheets laid over each other, what the review concluded (issue_found, no_issue_found, inconclusive, or pending when no result is recorded yet), and the issues each one supports. Filter by outcome or text. Each has a link that opens the two drawings together.
list_smart_overlaysReadSmart Overlays this account saved: drawings the person laid over each other in two colors, newest first, each with its files and link. Also how many free overlays are left and what one costs after that.
get_smart_overlayReadOne saved Smart Overlay: its files and each pair of sheets laid over each other, with whether the pair is aligned and whether an AI-drafted alignment still waits for the person's review.

Write tools

Assistants ask you before running these. The ones that delete cannot be undone.

ToolAccessWhat it does
create_projectWriteCreates a draft for a requested Groundbook drawing check and returns its upload link. Check list_projects and list_saved_files for existing drawings first. The person uploads PDF or DWG drawings on the project page; files attached in this chat cannot be sent to Groundbook. Give the project a name and optionally review instructions. For a new account without a plan, this also starts its free 7-day trial (Starter plan, no credit card), which makes the first project free up to $100. Repeating this call creates another draft.
update_projectWriteRename a project, set the language its findings are written in, or add a custom issue status or discipline to it.
delete_projectDeletesPermanently deletes a project with all its files and issues. This cannot be undone. Only the owner can delete.
share_projectDeletesInvite someone by email to a project, sending an invitation email, or turn organization-wide access on or off. Repeating an invitation can send another email.
remove_project_shareDeletesRemoves a person's access to a project, or cancels a pending invitation.
add_saved_files_to_projectWriteAdds PDFs or DWGs to a draft project's check: saved files, or PDFs or DWGs uploaded in Microsoft 365 Copilot or Teams chat (both from list_saved_files). Groundbook sets each file's type and role; change them only if the user asks.
import_from_egnyteWriteCopies PDFs or DWGs from the person's connected Egnyte into a draft project. Paths come from list_egnyte_folder. Each file is then analyzed; start_check once every file has finished.
import_from_onedriveWriteMicrosoft 365 Copilot and Teams only: adds PDFs or DWGs the person uploaded there (they are saved to OneDrive), or any PDF or DWG in their OneDrive, to a draft project. Pass the file names as the person sees them. Files attached in Claude, ChatGPT, or other chats are not in OneDrive: the person uploads them on the project page. Each file is then analyzed; start_check once every file has finished.
set_file_roleWriteMarks a file in a draft project as checked (reviewed for issues) or reference (context only), and optionally sets its file type: Drawing, Specifications, Report, Calculations, Code, Supporting document. Every drawing sheet, whatever its discipline, is a Drawing. Groundbook sets both when files are added; change them only if the user asks.
remove_fileDeletesRemoves a file from a draft project. The upload is deleted unless it is a saved file.
set_review_instructionsWriteWhat the check should focus on (at least 20 characters), an optional short title, and whether to check against building codes. Set the person's role and project phase here too; both are required before starting a check. Use values the person supplied.
add_code_sourceDeletesSets or replaces a draft project's source for a building code its drawings reference (codeName from get_project codeSources): a public URL, or one of the project's files that is the code book. The public URL may be fetched to read the code. Codes the drawings do not reference cannot be added.
remove_code_sourceDeletesRemoves a building code from a draft project's check.
start_checkWriteStarts Groundbook's review of a draft project's drawings. Applies the first-project discount and uses credits when available; otherwise a payment link comes back for the person to open. Every file must have finished analyzing and at least one must be marked checked.
buy_creditsWriteReturns a payment link for credits, which pay for checks, Smart Overlays, and project chat. Give a whole-dollar amount of $20 or more; 1 credit is $1. Nothing is charged until the person pays on that page. In an organization, only an admin can buy.
update_issueWriteChanges an issue's severity, status (open, reviewed, resolved, dismissed, or a project status), or labels.
comment_on_issueDeletesAdds a comment to an issue and emails mentioned people. Someone outside the project is only invited when grantProjectAccess is true. Repeating the call adds another comment and can send another notification.
delete_commentDeletesPermanently deletes a comment from an issue, with its attachments. People can delete only their own comments.
assign_issueDeletesAssigns an issue to someone by email and sends an assignment email. A person outside the project is only invited when grantProjectAccess is true. Repeating an existing assignment does not add another assignee; a failed notification may be retried.
unassign_issueDeletesRemoves an assignee from an issue, by assignee id (from get_issue assignees) or by email.
give_issue_feedbackWriteRecords whether an issue is correct, with optional reasons: important, low_importance, strong_evidence, wrong_or_missing_evidence, duplicate, unclear, related_issue, incorrect, not_relevant, not_yet_important, other. Optional details explain other. Usefulness is one shared value per issue: setting it replaces it for everyone, null clears it, and leaving it out keeps it.
export_issuesWriteBuilds a PDF report, marked-up drawings, a Bluebeam FDF, or a CSV of a project's issues. Returns an export id; call get_export until it is ready.
send_issues_to_fieldwireDeletesSends a project's issues to the person's connected Fieldwire as tasks, pinned on the plan when Fieldwire has that sheet. Sending an issue again updates its task. The Fieldwire project is the one the drawings came from when known; otherwise the result lists the projects to choose from. Returns a send id; call get_fieldwire_send until it is done.
create_smart_overlayWriteStarts a Smart Overlay: drawings laid over each other in two colors to see what differs. Give PDFs already in Groundbook (documentId from get_project files or list_saved_files); one file compares sheets within it, such as two floors. Returns a link: when the person opens it, the sheets are read, the pairs you name (or matching floors) are set up, and each pair is aligned. Nothing is charged here; each new sheet pair the person opens is one overlay, free at first and then paid with credits (the result says how many free ones are left).
askDeletesAsks Groundbook's project assistant about a project's drawings and issues and saves the conversation. It reads sheets, issues, and schedules and answers with references. Uses the project's chat allowance and existing credits. Repeating a question starts another turn and can use more credits. If status is running, call again with the conversationId and no question to collect the answer.

Data and privacy

An assistant only receives what it asks for through these tools, for the account that connected it. We never train on your data. Disconnect an assistant at any time from Connectors → AI assistants. See the Privacy Policy and Terms of Service. Questions: support@groundbook.ai.