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.
For Claude, ChatGPT, Gemini, Cursor, and any MCP-compatible agent.
https://mcp.jabb.cx/mcpTo explore and automate from the terminal.
pip install jabb-cliFor your services, pipelines, and BI.
https://api.jabb.cx/v1Quickstart
- 1Get access
Request developer access: you’ll receive a JABB_API_KEY tied to your enterprise workspace.
- 2Choose your entry point
MCP for your AI agents, CLI for the terminal, REST for your services.
- 3Make 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.
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.
Authorization: Bearer $JABB_API_KEYScopes
Permissions are split into two scopes. Request only what your integration needs.
| Scope | Access |
|---|---|
jabb:read | Read evaluations, scores by location, and trends. |
jabb:write | Trigger 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.
https://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-cliREST API
The REST API is versioned in the URL. Exchanges use UTF-8 encoded JSON, and dates follow the ISO 8601 format.
| Base URL | https://api.jabb.cx/v1 |
|---|---|
| Format | JSON · UTF-8 |
| Authentication | Authorization: Bearer <JABB_API_KEY> |
| Dates | ISO 8601 (UTC) |
Evaluations
/v1/evaluationsReturns verified evaluations (GPS, sealed timestamp, photo proof, and AI quality score) for your locations, from newest to oldest.
Parameters
limit | integer | Number 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" }| Status | Meaning |
|---|---|
400 | Invalid request: missing or malformed parameter. |
401 | Missing, expired, or invalid token. |
403 | The token does not have the required scope or permissions. |
404 | Resource not found. |
429 | Too many requests: retry after the indicated delay. |
500 | JABB-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.