Tool Bundles

How the 128 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 128 tools. 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: the core form-building tools plus responses, AI scores, and the environment's knowledge Vault. 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:

BundleFocusFamiliesTools
formsBuilding forms and reading their results (in the default)forms, responses, scoring41
vaultThe environment's Markdown knowledge Vault (in the default)vault4
contentCMS, blogs, content analytics, AI visibilitycms, contentReview, contentAnalytics, aiVisibility55
insightsResponses, leads, analytics, scores, workflow runsanalytics, scoring, leads, responses, workflows20
adminTeam, members, environments, feedbackteam, members, environments, feedback4
allEverythingall 16 families128

An unconfigured connection combines the forms and vault bundles (45 tools).

Families

Families are the smaller unit inside a bundle. You can select any of them directly:

FamilyWhat it coversTools
formsCreate, edit, style, route, and publish forms, including SDK form authoring (binding maps, HTML validation)33
responsesRead form submissions2
leadsQualified leads and lead counts, lead import3
analyticsForm, funnel, landing page, and environment analytics7
workflowsWorkflow run logs and per-step details2
scoringAI lead scores, response search, form comparisons6
vaultThe environment's Markdown knowledge Vault4
hubspotRead connected HubSpot contacts, companies, deals, owners, and properties12
cmsHeadless CMS content types, entries, and assets25
contentReviewThe blog review pipeline12
contentAnalyticsContent performance and AI traffic sources7
aiVisibilityAEO/GEO answer-engine visibility reports, prompts, and scans11
teamTeam, subscription, and billing info1
membersMember invitations1
environmentsEnvironment creation1
feedbackProduct feedback to the Surface team1

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 tools

Three rules:

  • forms names the bundle, not the bare family, so ?tools=forms also 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

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.

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.

On this page