Glacier — MCP Setup Guide
Glacier exposes an MCP (Model Context Protocol) server that lets Claude read and write your workspace natively. No copy-paste, no context switching — Claude can list your projects, read cards, create tasks, and draft docs as a genuine collaborator.
Quick start
Choose your client and connect in under two minutes.
Claude.ai (recommended)
Claude.ai supports MCP Connectors with automatic OAuth discovery. No config file or API key needed.
- Open claude.ai and go to Settings → Connectors (or Integrations, depending on your plan).
- Click Add connector and paste:
https://getglacier.ai/api/mcp - Glacier will ask you to sign in and authorise access.
- Click Authorize.
That's it. Claude can now read and write your Glacier workspace from any conversation.
Tip: You can also copy the connector URL from Project Settings → MCP & developer → Quick setup → Claude.ai inside the Glacier app.
Different email on Claude.ai and Glacier? No problem. When you click "Add connector," Glacier's sign-in screen will open — just sign in with the email tied to your Glacier workspace. Your Claude.ai account email and Glacier email don't need to match.
Claude Desktop
- Get your API key: Account Settings → MCP API Key → Generate key. Copy the key (shown once, starts with
glc_sk_). - Open your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
- Add Glacier under
mcpServers:
{
"mcpServers": {
"glacier": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/client-http"],
"env": {
"MCP_SERVER_URL": "https://getglacier.ai/api/mcp",
"MCP_AUTH_TOKEN": "glc_sk_your-key-here"
}
}
}
}
- Quit and reopen Claude Desktop. The Glacier tools will appear in the tool panel.
Claude Code
Claude Code supports two connection modes.
OAuth (recommended — no API key needed)
Add to your project's .mcp.json or global ~/.claude.json:
{
"mcpServers": {
"glacier": {
"type": "http",
"url": "https://getglacier.ai/api/mcp"
}
}
}
On the first connection Claude Code will open a browser window and walk you through a one-time OAuth sign-in. After that, tokens refresh automatically.
API key (static credential)
If you prefer a fixed token — for CI or shared environments — use an API key instead:
{
"mcpServers": {
"glacier": {
"type": "http",
"url": "https://getglacier.ai/api/mcp",
"headers": {
"Authorization": "Bearer glc_sk_your-key-here"
}
}
}
}
Get your key from Account Settings → MCP API Key → Generate key.
Tip: You can copy either config snippet pre-filled with the right URL from Project Settings → MCP & developer → Quick setup inside Glacier.
Cursor / VS Code
In your .cursor/mcp.json or VS Code MCP settings:
{
"mcpServers": {
"glacier": {
"url": "https://getglacier.ai/api/mcp",
"headers": {
"Authorization": "Bearer glc_sk_your-key-here"
}
}
}
}
Authentication
Glacier supports two auth methods.
OAuth 2.1 (Claude.ai, Claude Code)
Both Claude.ai and Claude Code support OAuth. Glacier advertises its OAuth configuration via /.well-known/oauth-authorization-server (RFC 8414), so no manual setup is needed — clients discover it automatically.
- Claude.ai: paste the MCP URL in Settings → Connectors. OAuth runs automatically.
- Claude Code: add the URL with no
headersblock. On first connection a browser window opens for sign-in, then tokens refresh automatically.
Tokens expire after 24 hours and are refreshed automatically. You can check your connection status and disconnect from Project Settings → MCP & developer.
During OAuth setup, Glacier's consent screen will ask you to sign in. Use the email associated with your Glacier workspace — this doesn't need to match your AI tool's email.
API key (Claude Desktop, Cursor, VS Code, CI)
- In Glacier, open Account Settings → MCP API Key.
- Click Generate key. Copy it — the key starts with
glc_sk_and is shown only once. - Paste it into your client's config as shown in the Quick start section above.
API keys are workspace-scoped and identify your Glacier user account regardless of which email your AI tool uses. Rotate your key from Account Settings if it's ever compromised.
Available tools
Once connected, Claude has access to the following tools.
Board
| Tool | What it does |
|---|---|
list_columns | Lists columns on a project board, with WIP limit and card count |
list_cards | Lists cards in a project or column; supports filtering by parent card |
get_card | Gets full card detail — description, assignee, labels, linked docs, GitHub links |
get_card_children | Lists sub-items (child cards) of a parent card |
create_card | Creates a card in a column with optional description, priority, and assignee |
create_cards | Creates multiple cards in one call — useful for batch imports from a brief |
update_card | Updates card fields or moves the card to a different column |
Docs
| Tool | What it does |
|---|---|
list_docs | Lists docs for a project or workspace |
get_doc | Reads a doc's full content as markdown |
create_doc | Creates a doc from markdown, optionally linked to a project |
update_doc | Updates the title or content of an existing doc |
link_doc_to_card | Associates an existing doc with a card |
Organisation
| Tool | What it does |
|---|---|
list_workspaces | Lists all workspaces you have access to |
list_projects | Lists all projects in a workspace |
list_labels | Lists labels defined for a project |
create_label | Creates a new label with a name and colour |
list_members | Lists workspace members and their roles |
Metrics
| Tool | What it does |
|---|---|
get_flow_metrics | Returns throughput and cycle time stats for a project |
Comments
| Tool | What it does |
|---|---|
list_card_comments | Lists comments on a card |
add_card_comment | Adds a comment to a card |
Annotations
Agents can propose text changes queued for human review, or leave inline comments anchored to specific text. Humans see each annotation as an inline highlight and can accept, reject, or reply from the doc editor.
| Tool | What it does |
|---|---|
propose_suggestion | Propose a text replacement on a doc range, queued for human review |
create_comment | Add an inline comment anchored to a specific text range |
list_annotations | List annotations on a doc, filterable by status (open, accepted, rejected, resolved, stale) |
reply_to_annotation | Add a reply to an existing annotation thread |
resolve_annotation | Close an annotation without recording a decision — use for comment threads or to dismiss without explicit rejection |
reject_annotation | Explicitly reject a suggestion with an optional reason — recorded in the audit trail |
propose_suggestion parameters
| Parameter | Required | Description |
|---|---|---|
doc_id | Yes | UUID of the target document |
anchor_text | Yes | Exact text to replace — the server finds it in the document automatically |
replacement_md | Yes | Replacement content in Markdown |
rationale | No | Explanation shown to the reviewer alongside the suggestion |
occurrence_index | No | Which occurrence to use (0-based) when anchor_text appears more than once |
create_comment parameters
| Parameter | Required | Description |
|---|---|---|
doc_id | Yes | UUID of the target document |
anchor_text | Yes | Exact text to anchor the comment on |
body | Yes | Comment text |
occurrence_index | No | Which occurrence to use (0-based) when anchor_text appears more than once |
reply_to_annotation parameters
| Parameter | Required | Description |
|---|---|---|
annotation_id | Yes | UUID of the annotation to reply to |
body | Yes | Reply text |
Anchor text matching Both
propose_suggestionandcreate_commentlocate the anchor by searching foranchor_textin the document. Pass the shortest unambiguous excerpt — typically a sentence or clause. If the text appears multiple times, setoccurrence_index(0 = first match).
Examples
Ask Claude to summarise your board
"What's on the Glacier board right now? Anything blocking?"
Claude calls list_columns to get the board structure, then list_cards for each column, and returns a concise status summary — what's in progress, what's waiting, and where WIP limits are hit.
Create cards from a brief
"Here's the feature brief: [paste text]. Break it into cards and add them to the Backlog column."
Claude calls list_columns to find the Backlog column ID, then create_cards with a batch payload — title, description, and priority for each item derived from the brief. One call, multiple cards.
[
{ "title": "Design onboarding flow", "priority": "high" },
{ "title": "Write copy for empty states", "priority": "medium" },
{ "title": "Set up analytics events", "priority": "medium" }
]
Generate a status report
"Write a weekly status update for the Glacier project. Include cycle time and any cards moved to Done this week."
Claude calls get_flow_metrics for throughput and cycle time, then list_cards filtered to the Done column to see what shipped. It synthesises both into a draft status report you can paste straight into Notion or send to stakeholders.
Review a doc and propose suggestions
"Read the Q2 strategy doc and suggest improvements to the goals section — keep each suggestion focused on one change."
Claude calls get_doc to read the document, then calls propose_suggestion for each change it wants to recommend — one call per suggestion, each anchored to the exact text it would replace:
{
"doc_id": "a1b2c3d4-...",
"anchor_text": "We will aim to grow revenue by exploring new markets",
"replacement_md": "We will grow revenue by entering two new verticals — SMB and mid-market — with dedicated GTM motions for each.",
"rationale": "The original is directionally vague. This version names the segments and the approach, making the goal measurable and ownable."
}
Each suggestion appears in the document as an inline diff — strikethrough on the original, replacement shown inline. You can review, accept, or reject each one from the editor. Open suggestions are also listed in the side panel where you can accept or reject in bulk.
To add context without proposing a change, use create_comment:
{
"doc_id": "a1b2c3d4-...",
"anchor_text": "Launch by end of Q3",
"body": "This date assumes the infrastructure work in GLAC-87 ships on time. Worth flagging as a dependency."
}
Multi-tenant scoping
MCP access mirrors exactly what you see in the app. There's no elevated privilege from the API.
- API keys are workspace-scoped: Claude sees all projects in your workspace, and only the projects in your workspace.
- OAuth tokens (Claude.ai) are user-scoped — they grant access to all workspaces and projects your account can reach, just as if you were signed in to the app. Use
list_workspacesto discover available workspace IDs, then passworkspace_idto board and card tools. - Write permissions follow your role: viewer accounts can call read tools but write tools will return a permission error. Only members with
board:writepermission can create or update cards.
Troubleshooting
Glacier tools don't appear in Claude Code.
- Check that your
.mcp.json(or~/.claude.json) has the correct URL:https://getglacier.ai/api/mcp. - If you're using OAuth, make sure you completed the browser sign-in when Claude Code first connected. If you skipped it or the window timed out, remove and re-add the MCP entry, then restart Claude Code.
- In Claude Code, run
/clearor fully restart the session — MCP connections are established at session start. - If tools still don't appear, open Project Settings → MCP & developer in Glacier. The OAuth connection indicator shows whether your session is authenticated. If it shows "Not connected", reconnect from Claude Code.
- Last resort: click Disconnect in MCP settings (if connected), restart Claude Code, and sign in again when prompted.
Glacier tools don't appear in Claude.ai.
Remove the Glacier connector from Claude.ai settings and re-add it. Claude.ai will re-run the OAuth flow and pick up a fresh token.
Connection fails with 401.
Your token may have expired or your API key may have been rotated.
- OAuth: remove and re-add the connector (Claude.ai) or reconnect from Claude Code.
- API key: generate a new key in Account Settings and update your config file.
Claude doesn't see my new cards. Cards created via the web app and cards created via MCP share the same data — there's no sync delay. If a card isn't visible, it may be in a different column or project than expected. Ask Claude to list_cards for the project to confirm.
Different email on Claude.ai / Claude Code and Glacier? This is fine. API keys identify your Glacier account regardless of which email your AI tool is signed in with. For OAuth, the consent screen asks you to sign in to Glacier — use the email tied to your Glacier workspace. The emails don't need to match.
Claude can't find a project. OAuth tokens are user-scoped — Claude can see all your workspaces and projects. Make sure you're passing the correct workspace_id to workspace-level tools. Use list_workspaces to discover available IDs.
Claude Desktop shows no Glacier tools. Make sure the config file is valid JSON (no trailing commas), the key is correct, and you've fully quit and restarted Claude Desktop (not just closed the window).