Developer Documentation

Your CX data, in your code and your agents.

Three entry points to the same verified data: the MCP server for AI agents, the CLI for the terminal, the REST API for your services.

Overview

JABB exposes evaluations verified by the Golden Proof Protocol, scores by location, and trends across your sites. Every access respects the permissions of the user or key making the call.

MCP Server

For Claude, ChatGPT, Gemini, Cursor, and any MCP-compatible agent.

https://mcp.jabb.cx/mcp
CLI

To explore and automate from the terminal.

pip install jabb-cli
REST API

For your services, pipelines, and BI.

https://api.jabb.cx/v1

Quickstart

  1. 1
    Get access

    Request developer access: you’ll receive a JABB_API_KEY tied to your enterprise workspace.

  2. 2
    Choose your entry point

    MCP for your AI agents, CLI for the terminal, REST for your services.

  3. 3
    Make your first call

    List the latest verified evaluations for your locations.

curl "https://api.jabb.cx/v1/evaluations?limit=5" \
  -H "Authorization: Bearer $JABB_API_KEY"

Authentication

The MCP server uses OAuth 2.1. Your agent automatically discovers the authorization server through the protected resource document, then asks you to sign in and approve access.

OAuth discovery document (real response)
GET https://mcp.jabb.cx/.well-known/oauth-protected-resource

{
  "resource": "https://mcp.jabb.cx",
  "authorization_servers": ["https://mcp.jabb.cx"],
  "scopes_supported": ["jabb:read", "jabb:write"],
  "bearer_methods_supported": ["header"]
}

The CLI and REST API use an API key passed in the Authorization header, in Bearer format.

Authentication header
Authorization: Bearer $JABB_API_KEY
An API key grants access to your company data: keep it server-side, never in a mobile app or front-end code.

Scopes

Permissions are split into two scopes. Request only what your integration needs.

ScopeAccess
jabb:readRead evaluations, scores by location, and trends.
jabb:writeTrigger actions that modify data in your workspace, based on your permissions.

MCP Server

JABB’s MCP server exposes around twenty tools covering evaluations, scores, and trends, for example jabb_list_evaluations. The full catalog is returned by the tools/list method once the agent is authenticated.

MCPhttps://mcp.jabb.cx/mcpEndpoint (Streamable HTTP)

Connect your agent

# Claude Desktop / claude.ai → Settings → Connectors → Add custom connector
Name:  JABB
URL:   https://mcp.jabb.cx/mcp
# Then sign in with your JABB account and approve access (OAuth 2.1).

Example questions

  • « Which locations have the lowest rating this week, and why? »
  • « Summarize negative reviews about wait times in Casablanca since Monday. »
  • « Compare the cleanliness score of my three Rabat sites over the last month. »

CLI

The jabb-cli CLI installs with pip. It uses the same account as your enterprise workspace and returns readable results or JSON for your scripts.

pip install jabb-cli

REST API

The REST API is versioned in the URL. Exchanges use UTF-8 encoded JSON, and dates follow the ISO 8601 format.

Base URLhttps://api.jabb.cx/v1
FormatJSON · UTF-8
AuthenticationAuthorization: Bearer <JABB_API_KEY>
DatesISO 8601 (UTC)

Evaluations

GET/v1/evaluations

Returns verified evaluations (GPS, sealed timestamp, photo proof, and AI quality score) for your locations, from newest to oldest.

Parameters

limitintegerNumber of evaluations to return.

Additional filters (location, period, channel) are described in the full reference provided with your key.

curl "https://api.jabb.cx/v1/evaluations?limit=5" \
  -H "Authorization: Bearer $JABB_API_KEY"

Response example

{
  "data": [
    {
      "id": "ev_…",
      "location": { "id": "loc_…", "name": "Casablanca · Anfa" },
      "channel": "location",
      "rating": 4,
      "text": "La file a avancé vite, mais les tables en terrasse n’ont jamais été débarrassées.",
      "language": "fr",
      "verified": { "gps": true, "timestamp": "2026-10-07T18:42:10Z", "photo": true },
      "quality_score": 92,
      "sentiment": "mixed",
      "themes": ["attente", "propreté"]
    }
  ]
}

Illustrative, shortened example: the exact field list is in the full reference.

Errors

Errors follow the OAuth format: an error code and a readable description. If accessed without a token, the server may respond with:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="jabb-mcp"
Content-Type: application/json

{ "error": "unauthorized", "error_description": "Bearer token required" }
StatusMeaning
400Invalid request: missing or malformed parameter.
401Missing, expired, or invalid token.
403The token does not have the required scope or permissions.
404Resource not found.
429Too many requests: retry after the indicated delay.
500JABB-side error: retry later.

Rate limits

Requests are rate-limited per key to ensure service stability. When the limit is reached, the API returns 429 with a Retry-After header: wait for the indicated delay, then retry, ideally with exponential backoff.

Best practices

  • Keep keys server-side and store them in a secrets manager.
  • Request the narrowest possible scope: jabb:read is enough for reading.
  • Rotate your keys regularly and revoke any no longer in use.
  • Cache results that change infrequently, such as weekly scores.
  • Handle 429 and 5xx errors with spaced-out retries.

Support

Questions about the API, MCP server, or CLI? Write to salim@jabb.cx with your company name and use case.

Get developer access

Tell us what you want to build. We’ll send you a test key and the full API reference.