# Token Footprint Reference > **Diátaxis type**: Reference > **Audience**: Developers integrating with the MCP server > **Generated by**: `go run ./cmd/audit_tokens/ -footprint` --- ## How tokens are counted Token counts use the **cl100k_base** tokenizer (the GPT-4 / GPT-3.5 encoding) via [`github.com/tiktoken-go/tokenizer`](https://github.com/tiktoken-go/tokenizer) — a pure Go port of OpenAI's tiktoken. The vocabulary is embedded at compile time (~4 MB). This is significantly more accurate than the `bytes ÷ 4` heuristic for JSON-dense content like MCP tool schemas, which contain many braces, identifiers, and nested objects. ## What each column means | Column | Description | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Configuration** | The `TOOL_SURFACE` / `CAPABILITY_SURFACE` combination. `dynamic` = find/execute (default); `meta` = domain-grouped dispatchers; `individual` = one tool per action. | | **Tier** | The GitLab licensing tier: Free/CE, Premium, or Ultimate. Higher tiers expose more actions. | | **Visible tools** | How many MCP tool definitions the client receives at startup. | | **Reachable actions** | How many distinct GitLab API actions the client can drive (may exceed visible tools in meta/dynamic mode via action routing). | | **META_PARAM_SCHEMA** | How meta-tool input schemas are generated: `opaque` (action enum + params:any, default), `compact` (property names + types only), `full` (full per-action schema with descriptions). | | **Tool schema tokens** | Token cost of the visible tool definitions (InputSchema, annotations, description). | | **Shared tokens** | Token cost of MCP resources (`gitlab://tools`, templates, workflow guides) and prompt templates. `full` = all resources; `minimal` = only `gitlab://tools` for on-demand schema browsing. | | **Total tokens** | Tool schema tokens + shared tokens. This is the approximate startup context-window cost. | ## Full matrix All measurements are against the current source tree. The catalog is built in-memory with a mock GitLab client; no network calls are made. | Configuration | Tier | Visible tools | Reachable actions | `META_PARAM_SCHEMA` | Tool schema tokens | Shared tokens | Total tokens | | ---------------------------- | -------- | ------------: | ----------------: | ------------------- | -----------------: | ------------: | -----------: | | `dynamic` / `full` (default) | Free/CE | 2 | 851 | n/a | 2,180 | 31,758 | 33,938 | | `dynamic` / `minimal` | Free/CE | 2 | 851 | n/a | 2,180 | 1,088 | 3,268 | | `meta` / `full` (opaque) | Free/CE | 33 | 851 | `opaque` | 135,826 | 31,758 | 167,584 | | `meta` / `minimal` (opaque) | Free/CE | 33 | 851 | `opaque` | 135,826 | 1,088 | 136,914 | | `meta` / `full` (compact) | Free/CE | 33 | 851 | `compact` | 201,091 | 31,758 | 232,849 | | `meta` / `minimal` (compact) | Free/CE | 33 | 851 | `compact` | 201,091 | 1,088 | 202,179 | | `meta` / `full` (full) | Free/CE | 33 | 851 | `full` | 287,566 | 31,758 | 319,324 | | `meta` / `minimal` (full) | Free/CE | 33 | 851 | `full` | 287,566 | 1,088 | 288,654 | | `individual` / `full` | Free/CE | 847 | 847 | n/a | 767,793 | 31,758 | 799,551 | | `dynamic` / `full` (default) | Premium | 2 | 1,003 | n/a | 2,180 | 31,758 | 33,938 | | `dynamic` / `minimal` | Premium | 2 | 1,003 | n/a | 2,180 | 1,088 | 3,268 | | `meta` / `full` (opaque) | Premium | 39 | 1,003 | `opaque` | 157,415 | 31,758 | 189,173 | | `meta` / `minimal` (opaque) | Premium | 39 | 1,003 | `opaque` | 157,415 | 1,088 | 158,503 | | `meta` / `full` (compact) | Premium | 39 | 1,003 | `compact` | 234,092 | 31,758 | 265,850 | | `meta` / `minimal` (compact) | Premium | 39 | 1,003 | `compact` | 234,092 | 1,088 | 235,180 | | `meta` / `full` (full) | Premium | 39 | 1,003 | `full` | 334,770 | 31,758 | 366,528 | | `meta` / `minimal` (full) | Premium | 39 | 1,003 | `full` | 334,770 | 1,088 | 335,858 | | `individual` / `full` | Premium | 999 | 999 | n/a | 917,625 | 31,758 | 949,383 | | `dynamic` / `full` (default) | Ultimate | 2 | 1,069 | n/a | 2,180 | 31,758 | 33,938 | | `dynamic` / `minimal` | Ultimate | 2 | 1,069 | n/a | 2,180 | 1,088 | 3,268 | | `meta` / `full` (opaque) | Ultimate | 50 | 1,069 | `opaque` | 172,172 | 31,758 | 203,930 | | `meta` / `minimal` (opaque) | Ultimate | 50 | 1,069 | `opaque` | 172,172 | 1,088 | 173,260 | | `meta` / `full` (compact) | Ultimate | 50 | 1,069 | `compact` | 253,270 | 31,758 | 285,028 | | `meta` / `minimal` (compact) | Ultimate | 50 | 1,069 | `compact` | 253,270 | 1,088 | 254,358 | | `meta` / `full` (full) | Ultimate | 50 | 1,069 | `full` | 358,772 | 31,758 | 390,530 | | `meta` / `minimal` (full) | Ultimate | 50 | 1,069 | `full` | 358,772 | 1,088 | 359,860 | | `individual` / `full` | Ultimate | 1,065 | 1,065 | n/a | 966,698 | 31,758 | 998,456 | ## Interpretation guide - **Dynamic mode** (default) exposes only 2 tools (`gitlab_find_action` + `gitlab_execute_action`) but reaches all catalog actions via routing. This is the lowest-token surface. - **Meta mode** exposes one dispatcher per domain (e.g. `gitlab_branch`, `gitlab_issue`). The `META_PARAM_SCHEMA` controls whether the action parameter's schema is generic (`opaque`) or detailed (`compact`/`full`). `full` doubles the token cost vs `opaque` but gives the LLM exact per-action input shapes. - **Individual mode** exposes every action as its own tool. This is the highest-fidelity but most expensive surface — suitable only for clients with large context windows. - **Tier scaling**: Free/CE has the fewest actions. Premium adds enterprise features. Ultimate includes everything. The token cost scales with the number of available actions. - **Shared tokens** are dominated by MCP resources (`gitlab://tools` template, workflow guides) and prompts. The `minimal` capability surface strips these to just `gitlab://tools`, cutting shared overhead by ~90%%.