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
Microsoft Copilot
Give a Copilot Studio agent access to your projects.
Claude
Ask Claude about your projects and issues. Two minutes, no setup skills needed.
ChatGPT
Ask ChatGPT about your projects and issues.
Gemini
Let Gemini Spark work in your projects.
Grok
Ask Grok about your projects and issues.
Claude Code and Cursor
For developers: use the tools inside a coding agent.
Command line
For developers: scripts and terminals with gb.
REST API
For developers: call every route from your own code.
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.
| Surface | Sign-in | Use it from |
|---|---|---|
| Hosted MCP server | Sign 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 key | Terminals, scripts, CI |
| REST API | API key or OAuth token | Your 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:
https://app.groundbook.ai/api/mcpMicrosoft 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.
- 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.
- For authentication choose OAuth 2.0 → Dynamic (with discovery). Copilot registers itself with us; there is nothing to copy.
- 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
- 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.
- A Groundbook page opens. Sign in if asked, then click Allow.
- Upload your drawings and start a check in Groundbook.
- 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. - 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
- Open Groundbook in ChatGPT and click Install plugin.
- Create a Groundbook account, or sign in to your existing account, then click Allow.
- 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:
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.
- Open Connected Apps in Gemini. Under Custom apps for Spark, paste the address above and click Next twice.
- Tick the box to accept Google’s notice, click Connect, then Agree and continue.
- A Groundbook page opens. Sign in if asked, then click Allow. Back in Gemini, click Connect.
- 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.
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"]}'- 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/authorizeas the authorization URL,https://app.groundbook.ai/api/oauth/tokenas the token URL, andread writeas the scopes. - 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.
- Open the agent and ask your question. The first time, connect Groundbook and click Allow.
Grok
- Open grok.com/connectors, click New Connector, then Custom.
- Name it Groundbook, paste the address above as the server URL, and click Add Connector.
- 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.
npx @groundbook/cli loginThen add it to your agent’s MCP servers:
{
"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.
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_2Commands
| Command | What it does |
|---|---|
gb login [--api-key KEY] | Save an API key. Asks for it when run in a terminal. |
gb logout | Forget the saved key. |
gb whoami | The signed-in account. |
gb <tool> --flag value | Run any tool. Flags mirror its parameters: gb list_issues --project-id ID --severity High. |
gb upload <file.pdf> --project ID | Add 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 mcp | Serve 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.
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" --yesREST 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 "https://app.groundbook.ai/api/auth/me" \
-H "Authorization: Bearer $GROUNDBOOK_API_KEY"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.
| What | Value |
|---|---|
| MCP endpoint | https://app.groundbook.ai/api/mcp |
| MCP versions | 2026-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 |
| Grant | Authorization code with PKCE, rotating refresh tokens |
| Client registration | Dynamic. 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
| Tool | Access | What it does |
|---|---|---|
get_me | Read | The 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_projects | Read | Projects 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_project | Read | One 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_files | Read | PDFs 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_folder | Read | Subfolders 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_issues | Read | Issues 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_issue | Read | One 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_export | Read | Progress of an export. When ready, the file can be downloaded from the project page's notifications, or with the CLI. |
get_fieldwire_send | Read | Progress of a send to Fieldwire: how many tasks were created, updated, pinned on a plan, or failed. |
list_project_overlays | Read | The 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_overlays | Read | Smart 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_overlay | Read | One 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.
| Tool | Access | What it does |
|---|---|---|
create_project | Write | Creates 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_project | Write | Rename a project, set the language its findings are written in, or add a custom issue status or discipline to it. |
delete_project | Deletes | Permanently deletes a project with all its files and issues. This cannot be undone. Only the owner can delete. |
share_project | Deletes | Invite 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_share | Deletes | Removes a person's access to a project, or cancels a pending invitation. |
add_saved_files_to_project | Write | Adds 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_egnyte | Write | Copies 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_onedrive | Write | Microsoft 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_role | Write | Marks 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_file | Deletes | Removes a file from a draft project. The upload is deleted unless it is a saved file. |
set_review_instructions | Write | What 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_source | Deletes | Sets 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_source | Deletes | Removes a building code from a draft project's check. |
start_check | Write | Starts 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_credits | Write | Returns 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_issue | Write | Changes an issue's severity, status (open, reviewed, resolved, dismissed, or a project status), or labels. |
comment_on_issue | Deletes | Adds 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_comment | Deletes | Permanently deletes a comment from an issue, with its attachments. People can delete only their own comments. |
assign_issue | Deletes | Assigns 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_issue | Deletes | Removes an assignee from an issue, by assignee id (from get_issue assignees) or by email. |
give_issue_feedback | Write | Records 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_issues | Write | Builds 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_fieldwire | Deletes | Sends 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_overlay | Write | Starts 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). |
ask | Deletes | Asks 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.