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
Claude
Ask Claude about your projects and issues. Two minutes, no setup skills needed.
ChatGPT
Ask ChatGPT about your projects and issues.
Microsoft Copilot
Give a Copilot Studio agent access to your projects.
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. | Claude, ChatGPT, Microsoft Copilot |
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/mcpClaude
- 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.
- A Groundbook page opens. Sign in if asked, then click Allow.
- 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.
- In ChatGPT, open Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
- Back in Apps & Connectors, click Create. Name it Groundbook, paste the address above as the server URL, choose OAuth for authentication, and click Create.
- 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.
- 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.
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?"Commands
| 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 |
| 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 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
| Tool | Access | What it does |
|---|---|---|
get_me | Read | The signed-in account: email, organization, and credit balance. |
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). |
get_project | Read | One project with its check status and progress, files, review instructions, code sources, price, and sharing. |
list_saved_files | Read | PDFs saved for reuse by this account or its organization, with the projects that already use them. |
list_issues | Read | Issues 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_issue | Read | One issue in full: description, impact, recommended fix, every sheet reference with the cited text, assignees, 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. |
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 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_project | Write | Rename a project, 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 | Write | Invite someone by email to a project, or turn organization-wide access on or off. |
remove_project_share | Deletes | Removes a person's access to a project, or cancels a pending invitation. |
add_saved_files_to_project | Write | Adds saved PDFs (see list_saved_files) to a draft project's check. |
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. |
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 (20-4000 characters), an optional short title, and whether to check against building codes. |
add_code_source | Write | Gives 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_source | Deletes | Removes a building code from a draft project's check. |
start_check | Write | Pays 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_issue | Write | Changes an issue's severity, status (open, reviewed, resolved, dismissed, or a project status), or labels. |
comment_on_issue | Write | Adds a comment to an issue. Mention people by email to notify them; someone outside the project is only invited when grantProjectAccess is true. |
assign_issue | Write | Assigns an issue to someone by email. A person outside the project is only invited when grantProjectAccess is true. |
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 and useful, with optional reasons: important, low_importance, strong_evidence, wrong_or_missing_evidence, duplicate, unclear, related_issue. |
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. |
ask | Write | Asks 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.