Tool Bundles
How the 132 MCP tools are organized into bundles and families, what loads by default, and how to choose the tools your connection gets
The Surface MCP server exposes 132 tools in 17 families. Loading every definition at once fills up an assistant's context, so a connection that asks for nothing specific gets the forms and vault bundles plus the hubspot family: the core form-building tools, responses, AI scores, the environment's knowledge Vault, and read access to connected HubSpot records. To load anything else, name a bundle, a tool family, or an exact list of tool names.
Bundles
A bundle is a set of tool families for one kind of session:
| Bundle | Focus | Families | Tools |
|---|---|---|---|
forms | Building forms and reading their results (in the default) | forms, responses, scoring | 41 |
vault | The environment's Markdown knowledge Vault (in the default) | vault | 4 |
campaigns | Reading an outbound campaign's tables, plus the Vault notes that explain them | campaigns, vault | 8 |
content | CMS, blogs, content analytics, AI visibility | cms, contentReview, contentAnalytics, aiVisibility | 55 |
insights | Responses, leads, analytics, scores, workflow runs | analytics, scoring, leads, responses, workflows | 20 |
admin | Team, members, environments, feedback | team, members, environments, feedback | 4 |
all | Everything | all 17 families | 132 |
An unconfigured connection combines the forms and vault bundles with the hubspot
family: 57 tools. The hubspot family joined that default in September 2026, so an
older note saying 45 is out of date.
Families
Families are the smaller unit inside a bundle. You can select any of them directly:
| Family | What it covers | Tools |
|---|---|---|
forms | Create, edit, style, route, and publish forms, including SDK form authoring (binding maps, HTML validation) | 33 |
responses | Read form submissions | 2 |
leads | Qualified leads and lead counts, lead import | 3 |
analytics | Form, funnel, landing page, and environment analytics | 7 |
workflows | Workflow run logs and per-step details | 2 |
scoring | AI lead scores, response search, form comparisons | 6 |
vault | The environment's Markdown knowledge Vault | 4 |
hubspot | Read connected HubSpot contacts, companies, deals, owners, and properties (in the default) | 12 |
campaigns | Read-only queries over an outbound campaign's Postgres tables | 4 |
cms | Headless CMS content types, entries, and assets | 25 |
contentReview | The blog review pipeline | 12 |
contentAnalytics | Content performance and AI traffic sources | 7 |
aiVisibility | AEO/GEO answer-engine visibility reports, prompts, and scans | 11 |
team | Team, subscription, and billing info | 1 |
members | Member invitations | 1 |
environments | Environment creation | 1 |
feedback | Product feedback to the Surface team | 1 |
Choosing What Loads
Selection goes on the ?tools= query parameter of the one /mcp endpoint, so it works in every client that accepts a URL. The value is a comma-separated list of bundles, family names, and individual tool names:
https://app.withsurface.com/mcp default forms + vault bundles
https://app.withsurface.com/mcp?tools=all full surface
https://app.withsurface.com/mcp?tools=content one bundle
https://app.withsurface.com/mcp?tools=responses,leads families
https://app.withsurface.com/mcp?tools=forms,cms bundle + family
https://app.withsurface.com/mcp?tools=list_forms,get_form_analytics individual toolsThree rules:
formsnames the bundle, not the bare family, so?tools=formsalso carries the responses and scoring tools.- A selection containing any unknown name falls back to everything, so a typo cannot produce a zero-tool server or silently narrow the set.
- A known tool name your connection's credential excludes (a write tool on a read-only connection) is skipped, not treated as a typo.
Header Alternative
For clients that configure headers but not URLs, the X-Surface-Tool-Families header takes the same comma-separated list. ?tools= wins when both are present:
{
"headers": {
"Authorization": "Bearer <your-api-key>",
"X-Surface-Tool-Families": "content"
}
}Per-client Recipes
# The default forms + vault bundles need no selection
claude mcp add --transport http surface-forms "https://app.withsurface.com/mcp" \
--header "Authorization: Bearer <your-api-key>"
# An insights session
claude mcp add --transport http surface-insights "https://app.withsurface.com/mcp?tools=insights" \
--header "Authorization: Bearer <your-api-key>"Read-only Connections
Add ?readonly=1 to get a connection with no write or admin tools, whatever the credential can otherwise do. It combines with ?tools=:
https://app.withsurface.com/mcp?readonly=1 reads of the default bundles
https://app.withsurface.com/mcp?tools=all&readonly=1 every read tool
https://app.withsurface.com/mcp?tools=content&readonly=1 content reads only?tools=all&readonly=1 is 79 of the 132 tools.
API keys are full-access by design, so ?readonly=1 is how you hand a key to an agent that should only read. OAuth connections without the write scope get the same read-only set either way. CMS tools are included: a read-only connection cannot see cms_delete_entry or any other CMS write. The four campaigns tools are read-only by construction, so they survive ?readonly=1 intact.
Whatever you select, every tool call stays scoped to the environment your API key or OAuth connection belongs to. Tool selection changes which definitions your assistant loads, never what it is allowed to touch.
Ready to Get Started?
See it on your own site, or open the app and build the first form.