Known MCP Limitations

Understand MCP tool constraints and design around them.

Use these limitations when designing an integration. For handling patterns and examples, see Reliability, Errors, and Pagination.

AreaCurrent constraintWhat to do
Search validationSome invalid requests return a generic HTTP 400 message without identifying the offending field.Check each field and operator through cb_reference; simplify one predicate at a time.
Error envelopeTransport, MCP, and tool-payload errors are separate layers.Check all layers before reading result rows.
Empty resultsZero rows may arrive without predicate, coverage, or access diagnostics.Validate identifiers and scope; do not equate zero matches with absence in the real world.
Expert answer shapingThe question input has no explicit row-limit, selected-field, deduplication, or continuation parameter.Use natural language to express intent; use structured search when you need explicit retrieval controls.
Expert interpretationExpert can narrow the answered question.Surface answered_question when supplied.
Profile selectionsUnknown or unavailable fields/cards can be omitted without an error.Validate selections and compare requested versus returned content; missing does not mean empty.
Related-entity budgetrelated_entity_limit is not a strict combined row cap across multiple cards.Select cards explicitly and enforce application-level payload safeguards.
Input limitsValidation can occur in the client or server, and out-of-range handling varies by input.Use supported values; do not rely on rejection or normalization of invalid values.
Entity resolutionCompany domains are unsuitable for person lookups and may yield the wrong entity or no candidates.Use a person collection, name, and context for person resolution.
Card continuationNo per-card total or effective page-size field is exposed. Single-card responses are capped at 100 or a lower applicable card/access limit; continuation can reflect budget clipping or an exactly full page.Fetch one card at a time, inspect the flag, and guard against empty pages and repeated cursors.
Multi-page consistencyRecords and counts can change between page requests.Keep the query unchanged, deduplicate UUIDs, and label interrupted traversals as incomplete.
Request correlationRequest IDs are useful for support but are not an application-level uniqueness guarantee. Some tools do not expose one.Record your own invocation ID, timestamp, and tool name as well.
Write retriesList creation and feedback are non-idempotent. Adding members to a list is marked idempotent; submitted IDs still do not confirm newly added members.Check existing lists before retrying creation. Verify membership after an uncertain addition, and avoid automatically repeating feedback.
Data-token metadataPer-request deduction is outside the business payload, in the raw result's _meta["cb/data_tokens"]. Some connectors omit it.Preserve and test outer metadata. A missing consumed amount is unknown, not zero. See Data-Token Metering.
Allowance and concurrencyA meter reading is not a reservation; other connections can use the same allowance.Use per-result deductions for attribution, not before/after balance differences. Unknown allowance is not unlimited.
Successful exhaustionA usable response can consume the remaining balance and report exhausted: true.Keep the returned data and stop further affected calls; inspect errors separately.
Cancellation and retriesA disconnected call can still complete a charge; a retry can consume tokens again.Track actual attempts separately and record unconfirmed charges as unknown.

Access and generated guidance

Programmatic access. A registered OAuth client identifies your application; it does not provide a service identity. Arrange unattended or shared access with your Customer Success Manager.

Knowledge Center answers. Follow citation links for supporting information. For implementation details, use the current Developer Reference and the tool schemas returned by your connection.

Guidance examples

Prefer the live per-field reference when constructing predicates. Identifier filters need returned UUIDs or permalinks; do not copy display names such as "San Francisco" into identifier-valued predicates.

A relationship subquery requires the appropriate relationship collection and nested query shape. If an example cannot be validated for your use case, obtain a compiled search with cb_expert_build_search, review its scope, and replay it through cb_search_query.

Reporting a problem

Contact your account team or Customer Success Manager with the UTC timestamp, client/version, tool name, redacted arguments, error code/message, and request ID when available. Describe whether the problem is a failed call, an unexpected interpretation, or an incomplete traversal.


Did this page help you?