MCP vs REST APIs for GTM agents

Short answer. Checked 8 November 2026 against MCP revision 2026-07-28. For one CRM contact job, official MCP suits compatible assistants that discover vendor tools; REST behind your functions suits explicit control. Neither is shown safer or faster, since nothing was run; this reads documented permissions and tool coverage, not a measured ranking.

Two white receiver blocks with equally projecting round and square navy shafts on a blue plate.

What this page covers

Facts checked
Sources
21 listed, with access dates
Screenshots
2 dated public-page captures
Score
No numeric score on this page

Public specification and vendor documentation read on 8 Nov 2026 in an AI-assisted research browser; 42 primary-source ledger rows and a 14-dimension paired matrix. Attio and HubSpot checked through their own documentation domains. Captures show public documentation, not accounts.

What I checked

  • Public documentation pages read for the MCP specification (revision 2026-07-28), OpenAI, Anthropic, Attio and HubSpot

Not covered

  • No MCP server started and no package installed
  • No OAuth flow, sign-in, API request or CRM change
  • No product credits spent
  • No speed, latency, reliability, token use, conversion or cost measured
  • Anthropic and OpenAI code examples read, not run

How these comparisons are made

How to decide

This page compares two ways to give a model the same CRM job: look up a contact, then create or update its record. The first way is the vendor's official MCP server, which publishes tools that a compatible assistant can list and call (MCP tools spec). The second is a function you define in your own application. The model asks for it, your code runs it, and your code calls the vendor's REST API (OpenAI function calling).

Three questions sort most cases. This is my reading of the documentation, not a test result.

  1. Does your assistant support the MCP features you need? Anthropic's Messages API MCP connector supports tool calls only, not resources or prompts (Anthropic MCP connector).
  2. Do you need HTTP behaviour that the vendor's MCP tools are not documented to cover? HubSpot documents batch upsert for contacts on its REST API (HubSpot contacts API). The MCP guide documents creating and editing contacts, and I found no batch upsert for MCP in the sources checked on 8 November 2026 (HubSpot MCP guide).
  3. Whose permissions should the agent carry? HubSpot's MCP server documents that users can only view and modify records they have access to (HubSpot MCP guide). A standard HubSpot OAuth app token reflects the scopes requested by the app, not the record limits of the authorizing user (HubSpot OAuth guide).

Nothing was run for this page. The answer depends on your host, your vendor and your tolerance for owning more code, and it says nothing about speed or reliability.

Scorecard at a glance

Status on 8 November 2026. n/s means not scored: no server, endpoint or account was exercised for this page.
DimensionMCPREST behind functionsEvidence held
Documented tools for the contact jobDocumented for Attio and HubSpotDocumented for Attio and HubSpotVendor docs (A03, A09, H03, H06)
Speed and latencyn/sn/sNone
Operational reliabilityn/sn/sNone
Output qualityn/sn/sNone
Interface and setup experiencen/sn/sPublic documentation pages only
CostNot comparedNot comparedNo hosting, model-token or plan cost was calculated

No rubric points are scored and there is no overall winner.

What each one is

The Model Context Protocol (MCP) encodes messages in JSON-RPC. Its standard transports are stdio and Streamable HTTP (MCP transports). The revision read for this page is 2026-07-28 (MCP specification). In that revision Streamable HTTP uses a POST endpoint with JSON or request-scoped SSE responses, and protocol-level sessions were removed (MCP Streamable HTTP). Tools are model-controlled and have names and input schemas. Resources are application-driven. Prompts are user-controlled (tools, resources, prompts). A remote MCP server is itself reached over HTTP, so the two approaches overlap at the transport level.

REST here means the vendor's HTTP API called from a function you define. With OpenAI function calling, the application executes the tool call and sends the output back to the model (OpenAI). Anthropic's client tools also run in your application and return a tool_result (Anthropic). OpenAI function definitions use JSON schema, and tool search, on gpt-5.4 and later, can load deferred functions later in a conversation (OpenAI). So tool discovery is not exclusive to MCP.

Wrapping a REST call in a function is a design choice. The vendors' documents describe the function mechanism, not a finished CRM integration.

How these facts were checked

On 8 November 2026 the research pass read public documentation in an AI-assisted research browser: the MCP specification, OpenAI and Anthropic tool documentation, and the documentation sites of two CRM vendors, Attio and HubSpot, on their own domains. The pass built a ledger of 42 primary-source rows and a 14-dimension paired matrix. Screenshots show public documentation pages, not product accounts.

No server was started and no package was installed. No OAuth flow, sign-in, API request or CRM change was attempted, and no product credits were spent. Official code examples from Anthropic and OpenAI were read as documentation and not executed. So this page can say what the specification and vendors document. It cannot say how fast, reliable or token-efficient either route is.

Two source cautions. A plain text extraction of HubSpot's MCP guide left out an Available tools list that the browser view showed, so this page does not enumerate HubSpot's tools. And the MCP revision cited here may differ from the revision a given vendor server implements; I did not check which revision each vendor supports.

Public MCP specification page captured on 8 November 2026 with the revision selector visible
MCP specification, public documentation, captured 8 November 2026 by an AI-assisted research browser. A documentation capture, not a product test. Source: modelcontextprotocol.io.

What the spec requires, what it leaves optional, what vendors add

Sources checked 8 November 2026. Spec requirements apply when a server or client implements the relevant capability.
LayerWhat the sources say
Spec requires (conditional on the capability)Servers that declare tools MUST answer tools/list (Tools). Tool servers MUST validate inputs, enforce access controls, rate limit invocations and sanitize outputs (Tools). Clients MUST treat tool annotations as untrusted unless they come from trusted servers (Tools). Prompt inputs and outputs MUST be validated (Prompts). MCP servers MUST NOT accept tokens not explicitly issued for them (Security best practices). Within the authorization profile, authorization servers MUST implement OAuth 2.1 (Authorization).
Spec leaves optional or recommendedAuthorization is OPTIONAL. HTTP implementations that support it SHOULD conform to the authorization specification (Authorization). Clients SHOULD confirm sensitive operations, validate results, apply timeouts and log tool usage for audit (Tools). Resources and prompts are separate capabilities, so a host may support tools without them (Resources, Prompts).
Vendor or host specificAttio MCP asks for confirmation on writes and auto-approves reads (Attio MCP). HubSpot ties tool availability to grants and requires reinstalling to add scopes (HubSpot MCP guide). OpenAI lets developers allow MCP calls automatically or require approval (OpenAI MCP guide). Anthropic's connector supports tool calls only, leaves OAuth and token refresh to API consumers, and offers beta pinning of tool lists (Anthropic MCP connector). None of these is a universal MCP guarantee.
Application design (my editorial view)Queues, business authorization, retry budgets, duplicate prevention and outcome reconciliation belong to whoever builds the integration, on either route. This is my synthesis from where the documents say execution happens, not a measured result.
The MCP specification Protocol Requirements passage states authorization is optional and distinguishes HTTP, STDIO and other transports.
Screenshot of Model Context Protocol public documentation page, captured 8 November 2026. Editorial use of a public page; not retouched. Editorial use of a public page; not retouched. Attributed, bounded documentation excerpt, not endorsement or blanket reuse permission. Public technical specification excerpt used to explain its authorization requirements., source

The two paths for one contact job

Both paths end at the same documented vendor capability.

  1. Path A: model host, then the vendor's official MCP server, then the CRM capability.
  2. Path B: model, then a schema-defined function, then your application policy and HTTP adapter, then the vendor's REST API, then the CRM capability.

Where the controls sit differs. On Path A, token audience checks sit with the MCP server (Security best practices), and approval sits with the host or the vendor (OpenAI, Attio). On Path B your code runs the call and returns the result (OpenAI), so rate-limit handling and outcome records sit in your application. You can also put your own service behind a reviewed MCP tool. That does not remove the duties for authorization, duplicate writes or untrusted content (Tools).

A rendered diagram of these two paths is not included in this version.

Capabilities for the contact job

What each vendor documents for looking up and writing a contact, checked 8 November 2026. Documented overlap only, with no parity test and no tool-count comparison.
ItemAttio MCPAttio RESTHubSpot MCPHubSpot REST
Official endpointAttio's own hosted MCP server (Attio)Attio REST API (Attio)Publicly hosted remote server, distinct from the Developer MCP server (HubSpot)CRM contacts API (HubSpot)
Create and updateCreate, update by ID, and upsert on a matching attribute such as email or domain (Attio)PUT upsert with matching_attribute; a value matching more than one record is rejected (Attio)Create and edit contacts, companies and deals (HubSpot)Create, retrieve, update and batch upsert by email or custom unique identifier; email partial upserts are not supported (HubSpot)
Who the call acts asThe Attio user, via OAuth (Attio)User-level OAuth is available and requires PKCE; workspace-level is the default if token_level is omitted; API keys are single-workspace (Attio)Respects the user's HubSpot record permissions; OAuth requires PKCE (HubSpot)App scopes, not the authorizing user's record limits (HubSpot)
ScopesScope strings and their mapping to REST scopes: not documented in the sources checked on 2026-11-08Scopes govern resources and operations, and are the same for OAuth and single-workspace tokens (Attio). The exact scope for the upsert endpoint was not capturedScopes follow the available tools and grants; new scopes need a reinstall (HubSpot)The documented example lists crm.objects.contacts.read and crm.objects.contacts.write (HubSpot)

HubSpot's MCP server blocks activities and conversations when Sensitive Data is enabled. HubSpot says this restriction is specific to the MCP server and does not apply to the standard CRM APIs (HubSpot MCP guide). That is a documented difference in what the MCP route can reach. It says nothing about whether the REST route is easier or safer.

Limits, retries and duplicate writes

Published limits and retry guidance, checked 8 November 2026. These are vendor-stated limits, not measured throughput.
RouteLimitsRetry guidance
Attio MCPPer workspace, tools in the same tier share one bucket. Published tiers: reads 100 requests per second, writes 25 per second, merge 5 per second, search 300 per minute, semantic search 2 per second, reporting 2 per second, SQL 2 per second (Attio)Reduce parallelism, space out sequential requests and wait before retrying (Attio)
Attio REST100 requests per second for reads and 25 for writes, with possible reductions during incidents or on some endpoints (Attio)A 429 response carries Retry-After. Attio says a rate-limited request was not processed, so it can be retried after the reset (Attio)
HubSpot MCPNo requests-per-second or per-account rate quota was documented in the sources checked on 2026-11-08. The same guide's tool list publishes per-call caps, including 200 search results per page on search_crm_objects and 100 object IDs on get_crm_objectsRetry and error mapping, idempotency keys and audit retention: not documented in the sources checked on 2026-11-08
HubSpot RESTMarketplace-distributed OAuth apps (legacy public apps, and developer platform 2025.2 and 2026.03): 110 requests every 10 seconds per installing account, excluding the CRM Search API (HubSpot)Apps exceeding limits receive a 429 response; throttling and endpoint exceptions are documented (HubSpot)

Attio's equal base rates for reads and writes do not show that the MCP and REST routes share a bucket, and its MCP search, merge, semantic search, reporting and SQL tiers have their own limits. The HubSpot MCP rate-quota cell is a coverage note. The integration guide's tool list does publish per-call caps. The sweep covered that guide, the linked use-case page, the docs navigation and API index, the OAuth guide, the usage guidelines and the contacts guide. It did not include a contract or an authenticated account.

On duplicates, the sources establish narrow facts. Attio upserts on a matching attribute and rejects a value that matches several records (Attio), and its explicit guarantee covers a 429 only. HubSpot documents batch upsert on REST (HubSpot). No general idempotency-key or exactly-once guarantee was found for either route. My view: after a timeout, check the vendor record before you replay a write.

Security and audit

MCP adds a metadata and server trust boundary, and the documents say so. Clients must treat tool annotations as untrusted unless the server is trusted (Tools). OpenAI warns that "a malicious server can exfiltrate sensitive data from anything that enters the model's context" (OpenAI MCP guide). Anthropic's beta pinning of tool lists keeps a server from changing the tools Claude receives partway through a conversation (Anthropic). These are warnings and controls, not measured incidence, and the vendor servers named here are official ones.

A REST-backed function lets your application choose which actions to expose (OpenAI). Returned content still enters the model's context, so injection handling remains your job on that route too. Neither route is immune.

For audit, the spec says clients SHOULD log tool usage (Tools). HubSpot publishes API usage logs for REST, and requests exempt from daily or secondary limits are not logged (HubSpot). Audit retention for HubSpot's MCP server is not documented in the sources checked on 2026-11-08. My view: record the attempted call and the vendor-confirmed change as two separate events.

What each does well and where it stops

MCP gives you a standard way to list tools with schemas (Tools). Attio and HubSpot both host official servers (Attio, HubSpot) and document user-bound access (Attio, HubSpot). Attio asks for confirmation on writes (Attio), and OpenAI lets you require approval per call (OpenAI). It stops where the host stops: Anthropic's API connector handles tool calls only (Anthropic), and vendors decide which tools exist. HubSpot's list depends on permissions, subscription and account configuration (HubSpot).

REST behind functions gives your application the execution step. You choose the schema, the exposed actions and the response the model sees (OpenAI, Anthropic). You can use documented endpoint features such as HubSpot batch upsert (HubSpot) and Attio's 429 contract (Attio). It stops where your code starts: schema mapping, request handling and returning results are yours to write and maintain. HubSpot's standard OAuth tokens also do not carry the authorizing user's record limits (HubSpot).

Who should pick which

  • Use official MCP if your assistant already supports it, the vendor documents the tools you need, and you want actions tied to a user's access with approval prompts (Attio and HubSpot both document user-bound access).
  • Use REST behind your own functions if you need an operation the MCP documentation does not cover, such as HubSpot batch upsert, or if your application must own approvals, retries and logs.
  • Use both if you wrap a reviewed MCP tool around your own service. You keep the duties for authorization, duplicate writes and untrusted content.

These are editorial recommendations from documentation, not test results. Before you commit, build the same contact lookup and update on each route in a sandbox account. This page has not done that.

Related pages: if your real question is which automation platform to buy, read n8n vs Make vs Zapier for GTM automation. If you are choosing the coding agent that hosts your tools, see Claude Code vs Codex. For who owns this work on a team, see GTM engineer vs RevOps vs growth engineer.

FAQ

Do I still need OAuth when I use MCP?

Authorization is optional in the MCP spec. HTTP implementations that support it should follow the authorization specification, and its authorization servers must implement OAuth 2.1 (MCP authorization). Attio's and HubSpot's official servers both document OAuth (Attio, HubSpot). With Anthropic's API connector, you handle the OAuth flow and token refresh yourself (Anthropic).

Can a GTM agent write to HubSpot through MCP?

HubSpot documents creating and editing contacts, companies and deals (HubSpot). Which tools you get depends on permissions, subscription and account configuration, new scopes need a reinstall, and activities and conversations are blocked when Sensitive Data is enabled (HubSpot). No write was attempted for this page.

Does Attio MCP have the same rate limits as its REST API?

The published base tiers match: reads 100 requests per second and writes 25 per second (MCP, REST). MCP also has a search tier at 300 requests per minute, plus other published tiers (merge, semantic search, reporting and SQL) that are not in that base match. The documents do not show that the two routes share one bucket.

Does MCP keep the same user permissions as REST?

It depends on the vendor and the token. Attio's MCP server authenticates as the user, and its REST API offers user-level OAuth but defaults to workspace-level (Attio MCP, Attio REST). HubSpot's MCP server respects user record permissions, while standard OAuth app tokens reflect app scopes (HubSpot MCP, HubSpot OAuth). The same OAuth label does not mean the same boundary.

Will retrying a contact write create duplicates?

For an Attio request that returned 429, Attio says the request was not processed and can be retried after the reset (Attio). Attio's upsert matches on an attribute and rejects ambiguous matches (Attio), and HubSpot documents batch upsert by email or unique identifier (HubSpot). For a timeout or other ambiguous failure, no general guarantee was found in the sources checked, so check the record first.

Does Anthropic's API MCP connector support resources and prompts?

Anthropic's documentation says only tool calls are currently supported (Anthropic). The spec treats resources and prompts as separate capabilities (Resources, Prompts). This applies to the Messages API connector, not every Claude product.

Disclosure, gaps and changelog

No testing was performed for this review. Source links go directly to the specification and vendors' official documentation. No product credits were spent. FAQ questions come from topics in the official documentation, not from search-volume data.

Known gaps: no runtime comparison; HubSpot MCP request-rate quotas, retry mapping, idempotency keys and audit retention not documented in the sources checked on 2026-11-08; per-call caps are documented in the integration guide tool list; Attio MCP scope strings and their mapping to REST scopes not documented in the sources checked on 2026-11-08; exact scope for Attio's upsert endpoint not captured; which MCP revision each vendor server implements not checked; no cost comparison; no authenticated or contractual review.

Changelog: 8 November 2026, first version. See the editorial methodology and the comparisons hub.

Sources

21 sources, each with the date it was read. Download as CSV
RefSourcePublished byAccessed
specMCP Specification (revision 2026-07-28)Model Context Protocol
transTransportsModel Context Protocol
httpStreamable HTTPModel Context Protocol
authAuthorizationModel Context Protocol
toolsToolsModel Context Protocol
resResourcesModel Context Protocol
promptsPromptsModel Context Protocol
secSecurity Best PracticesModel Context Protocol
ofnFunction callingOpenAI
omcpMCP serversOpenAI
ctoolTool use overviewAnthropic
cmcpMCP connectorAnthropic
amcpAttio MCPAttio
aauthAuthenticating requestsAttio
arateHandling rate limitsAttio
aupsUpsert a recordAttio
hmcpRemote HubSpot MCP serverHubSpot
hintIntegrate AI tools with the HubSpot MCP serverHubSpot
hoauthWorking with OAuthHubSpot
hcontCRM API ContactsHubSpot
huseAPI usage guidelinesHubSpot