# WhatsApp MCP server: Mujib's URL, OAuth sign-in and tools

> Mujib's WhatsApp MCP server lets Claude and ChatGPT read your conversations and bookings and, with consent, improve the agent: URL, OAuth, scopes and tools.

Mujib's WhatsApp MCP server is one URL, `https://api.mujib.ai/mcp`. Claude or ChatGPT connects to it and reads your business's WhatsApp, Instagram and Messenger conversations, bookings, customers and orders, through the account of the owner or admin who connected it. With full access it also improves the agent. The server never sends a message to your customers.

This page is the developer view: the URL, authentication, scopes and tools. The steps to add it inside each app are in [Mujib in Claude](https://docs.mujib.ai/en/integrations/claude/) and [Mujib in ChatGPT](https://docs.mujib.ai/en/integrations/chatgpt/).

## What is the WhatsApp MCP server URL?

The URL is `https://api.mujib.ai/mcp`, and the dashboard shows it too: open **Integrations**, then the **Mujib in Claude** or **Mujib in ChatGPT** card, and copy it under **Connection link** with **Copy the link**.

| Item | Value |
| --- | --- |
| URL | `https://api.mujib.ai/mcp` |
| Transport | Streamable HTTP, `POST` requests only; each request stands alone, with no stored session |
| Authentication | OAuth with PKCE; the token goes in `Authorization: Bearer <token>` |
| Scopes | `mujib:read` to read, `mujib:agent` to change the agent |

A request with no token gets `401` and the discovery document's address in the `WWW-Authenticate` header, which is how an app learns where to sign in:

```bash
curl -i https://api.mujib.ai/mcp
```

```text
HTTP/1.1 401 Unauthorized
www-authenticate: Bearer resource_metadata="https://api.mujib.ai/.well-known/oauth-protected-resource/mcp"

{"error":"A Mujib sign-in is required."}
```

## Which apps can connect to the MCP server?

Only Claude and ChatGPT. Each app registers itself on its first connection, and Mujib accepts the registration only when all of its return addresses are on `claude.ai`, `claude.com` or `chatgpt.com` over `https`.

- Any other app, including one that returns to an address on your own computer, is refused with `invalid_redirect_uri`.
- The consent page names the app by where its sign-in code returns, not by the name it registered with, and shows that address.
- Steps to add it: [Mujib in Claude](https://docs.mujib.ai/en/integrations/claude/) and [Mujib in ChatGPT](https://docs.mujib.ai/en/integrations/chatgpt/).

## How does the OAuth sign-in work?

Mujib follows the standard MCP flow: the app discovers the sign-in server from the URL itself, registers, then sends the person to sign in and consent.

1. The app sends a request with no token and gets `401` with the protected-resource document's address.
2. It reads `https://api.mujib.ai/.well-known/oauth-protected-resource/mcp` and learns the sign-in server, `https://api.mujib.ai/api/auth`.
3. It reads the sign-in server's settings from `https://api.mujib.ai/.well-known/oauth-authorization-server/api/auth` and registers at `https://api.mujib.ai/api/auth/oauth2/register`.
4. It opens Mujib's sign-in page for the person, with the two-step verification code when it is on, then the consent page, where they press **Allow**.
5. The app exchanges the authorization code for an access token and a refresh token, with PKCE `S256`.
6. It sends the token with every `POST` to `/mcp`.

This is the protected-resource document as the server returns it:

```json
{
  "resource": "https://api.mujib.ai/mcp",
  "authorization_servers": ["https://api.mujib.ai/api/auth"],
  "bearer_methods_supported": ["header"],
  "dpop_signing_alg_values_supported": ["EdDSA", "ES256", "ES512", "PS256", "RS256"],
  "scopes_supported": ["mujib:read", "mujib:agent"]
}
```

Mujib checks again on every request: that the person is still an owner or admin with an active account, that the business is active, and that the consent still exists. Disconnect the assistant, or change any of these, and access stops from the next request.

## What is the difference between `mujib:read` and `mujib:agent`?

`mujib:read` allows reading only and is required on every connection; `mujib:agent` adds tools that change the agent's setup.

| Scope | What it allows | On the consent page |
| --- | --- | --- |
| `mujib:read` | 11 read tools: conversations, bookings, customers, orders and the agent's setup | Always required |
| `mujib:agent` | 4 more tools that change the knowledge base, corrections and the agent's instructions | The **Full access: it sees and improves the agent** box, ticked by default |

- Untick the box before **Allow** and the app gets read access only.
- Each connection's level shows in the **Connected** list: **Full access** or **Can only look — for full access, disconnect it and connect again**
- The editing tools need `mujib:agent` in the token and in the current consent; a narrower consent later takes them away, even from an older token.

## Which tools does the MCP server offer?

The server offers 15 tools. An app gets each tool's input schema from `tools/list`, and the read tools carry `readOnlyHint`.

| Tool | What it does | Kind |
| --- | --- | --- |
| `workspace_info` | The business name, its branches, today's date and the sections it uses | Read |
| `waiting_for_staff` | Conversations handed to staff and waiting for a reply, with the customer, channel and last message | Read |
| `activity_summary` | A period's summary: conversations, new customers, what the agent handled alone, handoffs and first-response time | Read |
| `list_bookings` | Appointments for a day or a few days, with time, customer, specialist, branch and status | Read |
| `find_customers` | Finds a customer by name, in any Arabic spelling, or by number | Read |
| `read_conversation` | The latest messages of a customer's conversation, marked customer, agent or staff | Read |
| `customer_messages_today` | Today's customer messages without names, to find the most common questions | Read |
| `list_orders` | Active or finished orders, with today's totals | Read |
| `leads_to_follow_up` | Interested customers who went quiet, with the days since they last wrote | Read |
| `get_agent_setup` | The agent's instructions, handoff rules, preferred and forbidden words, and active corrections | Read |
| `search_knowledge` | Searches the agent's knowledge base | Read |
| `add_knowledge_entry` | Adds an entry to the knowledge base | Change |
| `update_knowledge_entry` | Edits an entry's title or text, or switches it off | Change that replaces what is there |
| `add_agent_correction` | A short rule the agent follows: how to answer, or a correct fact | Change |
| `update_agent_instructions` | Replaces the agent's instructions, handoff instructions, or the word lists | Change that replaces what is there |

- `list_bookings` refuses when bookings are off for your business, and `list_orders` when your business does not take orders.
- A tool's result is JSON text; an error is a result with `isError` and a short sentence giving the reason.
- Every change applies to the agent from its next reply and can be undone on the Integrations page.

## What limits and errors can an app receive?

Each connection, meaning one person with one app, may make 120 requests a minute.

| Situation | Answer |
| --- | --- |
| Over the per-minute limit | `429` with a `Retry-After` header |
| No token | `401` with the discovery document's address |
| The connection was removed, the person's account was disabled, or the business is no longer active | `401` with `error="invalid_token"`, so the app asks to sign in again |
| The person is no longer an owner or admin | `403` with `error="insufficient_scope"` |
| Wrong input, or something not found in your business | A tool result with `isError` |

## How do I review what the assistant read and undo its changes?

Everything the assistant does shows on the app's own card on the **Integrations** page.

1. Open the **Mujib in Claude** or **Mujib in ChatGPT** card.
2. **What it read lately** lists its latest requests, each with a short label and never message text. Mujib keeps this log for 90 days.
3. **What it changed in the agent** lists the latest changes to the agent, from Claude or ChatGPT, each with **Undo** to put the agent back as it was from its next message.
4. Under **Connected**, press **Disconnect** next to anyone to stop their access at once.

> **Upgrading access**
>
> A read-only connection never becomes full access by itself: disconnect it, connect again from inside the app, and leave the **Full access: it sees and improves the agent** box ticked.

## Frequently asked questions

### Can the MCP server send WhatsApp messages to my customers?

No. None of its tools sends a message to a customer. It reads your business's data, and changes the agent's setup only when you grant full access.

### Can I connect it to an app other than Claude or ChatGPT?

No. Mujib accepts registrations only from apps that return to Claude's or ChatGPT's own sites, and refuses any other app.

### Who can connect an assistant to Mujib?

Only the account owner and admins, each from their own account. The two-step verification code is still asked for when it is on.

### How do I cut an assistant's access at once?

Open the app's card on the Integrations page and press **Disconnect** next to the person. Access stops from the next request, not when the token expires.

### Is what the assistant reads logged?

A short label of each request is kept, such as the tool and what it searched for, never message text, for 90 days.

---

Source: https://docs.mujib.ai/en/developers/mcp/ · Last updated: 2026-11-04
