Developers

Documentation

Groundbook for developers

Everything you can do on the website, you can do from Claude, ChatGPT, Microsoft Copilot, 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.Claude, ChatGPT, Microsoft Copilot
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

Claude

  1. Open Groundbook in the Claude directory and click Connect to Claude. Or, inside Claude, open Settings → Connectors, click Browse connectors, search for Groundbook, and click Connect.
  2. A Groundbook page opens. Sign in if asked, then click Allow.
  3. Start a new chat and ask, for example, “What are the open high-severity issues on my latest project?” The first time, Claude asks permission to use each tool; click Allow.

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

ChatGPT

Groundbook is under review for the ChatGPT app directory. Until it is listed, add it by hand. ChatGPT calls this developer mode.

  1. In ChatGPT, open Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
  2. Back in Apps & Connectors, click Create. Name it Groundbook, paste the address above as the server URL, choose OAuth for authentication, and click Create.
  3. Sign in and click Allow. In a new chat, open the tools menu, pick Groundbook, and ask your question.

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.

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?"

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
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 26 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, and credit balance.
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).
get_projectReadOne project with its check status and progress, files, review instructions, code sources, price, and sharing.
list_saved_filesReadPDFs saved for reuse by this account or its organization, with the projects that already use them.
list_issuesReadIssues found on a project, most severe first. Filter by severity, status, discipline, assignee, or text. Each issue has a number, sheet references, and a link.
get_issueReadOne issue in full: description, impact, recommended fix, every sheet reference with the cited text, assignees, and comments.
get_exportReadProgress of an export. When ready, the file can be downloaded from the project page's notifications, or with the CLI.

Write tools

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

ToolAccessWhat it does
create_projectWriteCreates a new draft project. Give it an address or name, and optionally what the check should focus on. Files are added next (from saved files, by upload on the site, or by email), then start_check.
update_projectWriteRename a project, 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_projectWriteInvite someone by email to a project, or turn organization-wide access on or off.
remove_project_shareDeletesRemoves a person's access to a project, or cancels a pending invitation.
add_saved_files_to_projectWriteAdds saved PDFs (see list_saved_files) to a draft project's check.
set_file_roleWriteMarks a file in a draft project as checked (reviewed for issues) or reference (context only), and optionally sets its file type.
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 (20-4000 characters), an optional short title, and whether to check against building codes.
add_code_sourceWriteGives a draft project's check the source for one of the building codes its drawings reference (codeName from get_project codeSources, where sourceStatus is missing): a public URL, or one of the project's files that is the code book. Codes the drawings do not reference cannot be added.
remove_code_sourceDeletesRemoves a building code from a draft project's check.
start_checkWritePays for and starts the check on a draft project. Credits or the free first project are used 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.
update_issueWriteChanges an issue's severity, status (open, reviewed, resolved, dismissed, or a project status), or labels.
comment_on_issueWriteAdds a comment to an issue. Mention people by email to notify them; someone outside the project is only invited when grantProjectAccess is true.
assign_issueWriteAssigns an issue to someone by email. A person outside the project is only invited when grantProjectAccess is true.
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 and useful, with optional reasons: important, low_importance, strong_evidence, wrong_or_missing_evidence, duplicate, unclear, related_issue.
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.
askWriteAsks Groundbook's project assistant a question about a project's drawings and issues, in plain language. It reads the sheets, issues, and schedules and answers with references. Uses the project's chat 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.