> ## Documentation Index
> Fetch the complete documentation index at: https://docs.morphic.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Tool Groups

> Choose which slice of the 103-tool surface a connection sees.

Morphic MCP registers **103 tools**. Advertising all of them costs roughly 105 KB — about 26–30k tokens — of `tools/list` on every connect, before the user has typed anything. Most integrations want a fraction of that.

Tools are therefore organised into **groups**, and a connection can ask for a subset.

## The groups

Each group has a stable kebab-case `id`. Ids appear in customer connection URLs and are treated as API surface: new ids get added, existing ids are never renamed or repurposed.

| `id`                   | Group                | Tools | Advertised by default |
| ---------------------- | -------------------- | ----- | --------------------- |
| `context`              | Context              | 2     | Yes                   |
| `schema`               | Schema               | 2     | Yes                   |
| `entities`             | Records              | 18    | Yes                   |
| `activities`           | Activities           | 12    | Yes                   |
| `notes`                | Notes                | 6     | Yes                   |
| `kb`                   | Knowledge Base       | 6     | Yes                   |
| `wiki`                 | Wiki                 | 5     | Yes                   |
| `memory`               | Memory               | 3     | Yes                   |
| `calendar`             | Calendar             | 6     | Yes                   |
| `meetings`             | Meetings             | 7     | Yes                   |
| `automations`          | Automations          | 11    | Yes                   |
| `revenue-intelligence` | Revenue Intelligence | 17    | Yes                   |
| `workspace`            | Workspace            | 3     | Yes                   |
| `tasks`                | Task Suggestions     | 2     | Yes                   |
| `search`               | Web Search           | 1     | Yes                   |
| `addons`               | Paid Add-ons         | 3     | **No — opt in**       |

`ping` belongs to no group and is always registered, however narrow the profile — it is the connection smoke test.

See the [Tools Reference](/mcp/tools-reference) for the tools in each group.

## Paid add-ons are off by default

<Warning>
  `parallel_search`, `flint_action` and `agentmail_action` are **not advertised by default**. Even a workspace that has purchased and installed the add-on will not see them until the connection opts in.
</Warning>

The add-on tools are entitlement-gated at call time, but entitlement cannot be checked at *registration* time without a blocking backend round-trip on every connect. Rather than advertise three tools that almost every workspace would get an "add-on not installed" error from, the `addons` group defaults to off.

If your workspace is entitled, opt in on the connection URL:

```
https://mcp.morphic.io/v2/mcp?tools=addons
```

...which gives you the add-ons **only** (plus `ping`). To get everything including add-ons, send `?tools=` with an empty value — an empty spec means "every group", and it stays correct when new groups are added:

```
https://mcp.morphic.io/v2/mcp?tools=
```

## Per-connection subsetting: `?tools=`

Append `?tools=` to the MCP transport URL. The value is a comma-separated spec:

| Spec                                   | Result                                                           |
| -------------------------------------- | ---------------------------------------------------------------- |
| *(no `?tools=` at all)*                | The server default — every group **except** `addons`             |
| `?tools=` (present but empty)          | Every group, including `addons`                                  |
| `?tools=entities,activities`           | Exactly those two groups (allowlist), plus `ping`                |
| `?tools=-addons,-revenue-intelligence` | Every group except those two (subtraction)                       |
| `?tools=entities,search,-search`       | Allowlist is applied first, then subtraction — leaves `entities` |

Unknown group ids are **ignored, not fatal**. A stale URL or an id removed in a later release degrades to a working connection rather than a broken one; the server logs one warning listing every unknown id.

Example — a support bot that only needs records and the knowledge base:

```json theme={null}
{
  "mcpServers": {
    "morphic": {
      "url": "https://mcp.morphic.io/v2/mcp?tools=schema,entities,kb"
    }
  }
}
```

<Note>
  Subsetting changes what is **advertised**, not what is authorised. The permission level you approved when connecting is unchanged; a narrower `?tools=` spec is a context-window optimisation and a scoping convenience, not a security boundary. To actually restrict what a connection can do, choose a lower tier on the approval screen — see [Authentication](/mcp/authentication#permission-levels).

  ### Read/write execution profiles

  Agent runtimes that need a safe concurrency boundary can add `?effect=read` or `?effect=write`.
  The two profiles are disjoint and are derived from the registry's `readOnlyHint` annotations. Morphic's
  Revenue Agent uses the read profile for native Hermes parallel tool execution and keeps the write
  profile sequential. Like `?tools=`, this only changes advertisement; it does not grant permission.
</Note>

## Server-wide default: `MCP_TOOL_GROUPS`

Self-hosted operators set the default profile for every connection with the `MCP_TOOL_GROUPS` environment variable. It takes the same spec syntax.

```bash theme={null}
MCP_TOOL_GROUPS=            # advertise every group, add-ons included
MCP_TOOL_GROUPS=-addons     # the shipped default
MCP_TOOL_GROUPS=schema,entities,activities,notes
```

Precedence is **`?tools=` query param → `MCP_TOOL_GROUPS` → `-addons`**. A connection that sends no `?tools=` gets the env-configured default; one that sends `?tools=` (even empty) overrides it entirely.
