MCP

The GroWrk MCP server lets AI tools (Claude, Cursor, ChatGPT, and any MCP-compatible client) read and act on your GroWrk data through the same tool core as the REST API and the CLI.

  • Endpoint: https://ai.growrk.com/mcp
  • Transport: Streamable HTTP (JSON-RPC 2.0 over POST)

Your role and the permissions you grant determine which tools are available and what they can do.

Setting a connection up takes the first three sections. Everything from Authentication onwards is the technical reference for the endpoint itself.

Connect your account

The walkthrough below uses Claude. For step-by-step instructions in Cursor, ChatGPT and other clients, see connect.growrk.com.

Note that only organizational owners or primary owners can add custom connections in Claude Team and Enterprise plans.

  1. In Claude, go to Settings. MCP
  2. Go to Connectors > Customize > Add a custom connector. MCP
  3. Enter a name for the connector. In the Remote MCP server URL field, enter the following link: https://ai.growrk.com/mcp. Then select Add. MCP
  4. Select Connect. You will be navigated to the GroWrk login page. MCP
  5. Enter your GroWrk credentials. MCP
  6. To authorize the connection, set your permissions, then select Allow Access. You'll be redirected back to Claude once connected.

GroWrk groups access into ten permissions: a read and a write for each of employees, orders, inventory, teams and company addresses. Each permission lists the individual tools it unlocks, so you can see exactly what you're granting before you approve it, and the group headers show how many tools each side covers.

Two things on this screen are worth reading rather than clicking past:

  • Unverified application: expected for a connector you added yourself. Only continue if you recognize the app.
  • Data destination: where your GroWrk data will be sent. Check it matches the tool you're connecting.

Grant only what the tool actually needs. Read and write are independent: granting Create orders does not also grant Read orders, so a tool that places an order and then reads it back needs both. MCP

Connecting a different client

Whichever tool you use, the connection details are the same:

  • Name: GroWrk MCP
  • URL: https://ai.growrk.com/mcp

Sign in with your GroWrk credentials when prompted.

Once connected, try asking

  • "Who am I connected to GroWrk as?"
  • "List all orders that are In Progress."
  • "Where is the shipment for order ABC123?"
  • "What devices does Jane Doe have?"
  • "Show available laptops in stock in the US."
  • "Place a deployment order for Jane Doe."

Managing permissions afterwards

Permissions live in two independent places, and it is worth knowing which one you are looking at:

  • In GroWrk: what the application is allowed to reach in your account. This is the grant you made when authorizing, and it is the one that actually gates access.
  • In your AI client: when that client asks you before calling a tool it already has access to. This is a convenience setting; it cannot widen what GroWrk allows.

In GroWrk

In the Connections section of the navigation bar, select the MCP Connectors tab. Every connected application is listed with its permissions and when the connection expires. MCP

Select the application to review or change what it can do, or to disconnect it entirely. MCP

In your AI client

Most clients keep their own per-tool approval settings: whether to allow a tool automatically, ask first, or block it. In Claude this lives on the connector itself. MCP

Authentication

The MCP endpoint accepts two credentials:

  • OAuth 2.1 (recommended for interactive clients): the "Sign in with GroWrk" flow used in the walkthrough above. The client discovers the endpoints, you sign in and consent to permissions, and the client receives a token.
  • API key: present a grk_sk_ key in the X-API-KEY header, exactly as with the REST API. Useful for headless or server-side MCP clients.

Either way, the capability check happens per tool call, against the permissions attached to that session.

OAuth 2.1

GroWrk implements OAuth 2.1 with:

  • Authorization Code flow with PKCE (S256, required).
  • Dynamic Client Registration (RFC 7591), so clients can register themselves.
  • Public clients: no client secret required.
  • Refresh tokens, so long-lived sessions don't need to re-consent.

Permission and revocation changes propagate on the next request. Revoke a connection in the app and the session stops working immediately.

Discovery

Clients discover the OAuth endpoints automatically. When an unauthenticated request hits /mcp, the server replies 401 with a WWW-Authenticate header pointing at its protected-resource metadata (RFC 9728):

curl https://ai.growrk.com/.well-known/oauth-protected-resource
{
  "resource": "https://ai.growrk.com/mcp",
  "authorization_servers": ["https://ai.growrk.com"],
  "scopes_supported": [
    "mcp:employees:write",
    "mcp:employees:read",
    "mcp:orders:read",
    "mcp:orders:write",
    "mcp:inventory:read"
  ],
  "bearer_methods_supported": ["header"]
}

Discovery advertises fewer scopes than exist. The metadata above lists the original five capabilities, while ten are grantable (the newer teams, company, and inventory:write scopes arrived with the v2 → v4 migration). Their tools are registered and enforced normally; the discovery document has not caught up. If an OAuth client cannot request a newer scope yet, authenticate that connection with an X-API-KEY instead, where the full capability set is available. See Capabilities for the complete list.

This is expected to resolve when the v2 → v4 migration ships; until then, treat the five advertised scopes as the OAuth ceiling.

That points to the authorization-server metadata (RFC 8414), which lists the authorize, token, and registration endpoints:

curl https://ai.growrk.com/.well-known/oauth-authorization-server
{
  "issuer": "https://ai.growrk.com",
  "authorization_endpoint": "https://ai.growrk.com/api/oauth/authorize",
  "token_endpoint": "https://ai.growrk.com/api/oauth/token",
  "registration_endpoint": "https://ai.growrk.com/api/oauth/register",
  "revocation_endpoint": "https://ai.growrk.com/api/oauth/revoke",
  "response_types_supported": ["code"],
  "grant_types_supported": ["authorization_code", "refresh_token"],
  "code_challenge_methods_supported": ["S256"],
  "token_endpoint_auth_methods_supported": ["none"]
}

Most MCP clients handle this handshake for you. You only paste the server URL and sign in.

Connecting programmatically

To initialize a session, POST a JSON-RPC initialize request. The example below uses an API key; an OAuth client sends Authorization: Bearer <token> instead.

curl -X POST https://ai.growrk.com/mcp \
  -H "X-API-KEY: grk_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "clientInfo": { "name": "my-client", "version": "0.0.1" },
      "capabilities": {}
    }
  }'

The response carries an Mcp-Session-Id header; send it back on subsequent requests in the same session.

Available tools

Each permission on the authorization screen maps to one capability, which unlocks a fixed set of tools:

Permission on screenCapability
Read employeesmcp:employees:read
Read ordersmcp:orders:read
Read inventorymcp:inventory:read
Read teamsmcp:teams:read
Read company addressesmcp:company:read
Create and update employeesmcp:employees:write
Create ordersmcp:orders:write
Create and update inventorymcp:inventory:write
Create and update teamsmcp:teams:write
Create company addressesmcp:company:write

Read-only tools

ToolScopeFunction
whoamiNoneThe authenticated user and their access level. Always available, with or without permissions
list_ordersmcp:orders:readSearch and list orders (free-text, status/type filters, sorting, pagination)
get_ordermcp:orders:readA single order with its full hierarchy (parent + sub-orders, device requests, tracking)
get_order_historymcp:orders:readAn order's event history and per-device timeline
get_order_slamcp:orders:readAn order's SLA / delay status and the reasons for any delay
validate_order_constraintsmcp:orders:readCheck whether an order type can be placed for an employee (run before create_order)
get_trackingmcp:orders:readShipment tracking for an order, merged with live courier data
list_employeesmcp:employees:readSearch and list employees
get_employeemcp:employees:readA single employee, including delivery address
list_available_countriesmcp:employees:readThe countries you already have employees in, derived from their stored delivery addresses
list_teamsmcp:teams:readThe company's teams (managers see only the teams their role scopes them to)
get_teammcp:teams:readA single team, including its employee count
search_inventorymcp:inventory:readSearch company inventory (category, country, status, in-stock filters)
get_assigned_devicesmcp:inventory:readDevices currently assigned to an employee
get_productmcp:inventory:readA single device: assignment, condition, location, serial number (employees may only read their own)
get_device_optionsmcp:inventory:readAvailable device options, ranked by spec and availability
suggest_alternative_devicemcp:inventory:readPurchasable alternatives from the master catalog when a device is unavailable
list_company_addressesmcp:company:readSaved office / warehouse addresses devices can ship to or be collected from

Write tools

These require the matching write scope and ask for your approval before running.

ToolScopeFunction
create_ordermcp:orders:writePlace an order (Deployment, Offboarding, Collection, Maintenance, or Swap from Inventory)
create_purchase_ordermcp:orders:writePurchase catalog devices for an employee or into the company inventory pool
add_power_accessorymcp:orders:writeRequest a replacement charger for a device on an existing order
create_employeemcp:employees:writeCreate a new employee record
update_employeemcp:employees:writeUpdate an employee's editable fields
create_teammcp:teams:writeCreate a team (the name must be unique within the company)
update_teammcp:teams:writeRename an existing team
add_product_pin_codemcp:inventory:writeStore a device's unlock PIN (Desktops, Laptops, Mobile, Tablet only)
create_company_addressmcp:company:writeSave a new office / warehouse address

Prefer code or a terminal? The same operations are available through the REST API and the CLI.