MCP App Store
by KeenEthics

Overview

Vendasta is now in Claude. Connect once and ask for what you need in plain English. Before a call, ask for the company and its open deals. After it, hand Claude your meeting notes and it creates the contact or opportunity. After a pipeline review, tell it which deal fields are wrong and it fixes them. No tab switching. Stuck on a setting? Ask "how do I do this in Vendasta?" and Claude answers from our published docs. Docs search needs no sign-in. Claude can search and read contacts, companies, opportunities, associations and pipelines. It can create or update contacts, companies and opportunities, link them to each other, and create pipelines. Nothing here deletes anything. Sign in with your own Vendasta login. Claude can only do what your login allows, across your Partner Center or a single account group. For Vendasta Partners and their teams. A Vendasta account is required.

Tools

CRMAssociationService_CreateAssociation

Claude
Creates a directional association between two CRM objects. The association type must be one of the fixed values with the correct direction (see the association type field description). Creating a duplicate association (same type, fromId, and toId) returns an ALREADY_EXISTS error (HTTP 409). Requires a valid Vendasta IAM bearer token.

CRMAssociationService_ListAssociation

Claude
Lists associations in a namespace. Use this to discover a record's relationships; for example an opportunity related company or contact is represented only as an association, not as a field on the opportunity. Requires a valid Vendasta IAM bearer token.

CRMCompanyService_CreateCompany

Claude
Creates a company in the given namespace. The request message is shared with the contact, opportunity, and custom-object create endpoints, so only company fields apply here. Set values in crmObject.fields, each naming the field by fieldId (or by externalId, which for built-ins takes the form standard__*); discover both from the field-schema list endpoint for object type Company. Omit crmObject.crmObjectId — the service assigns the id and returns it as crmObjectId in the response. Two fields behave differently here than their own documentation suggests: idempotencyId is accepted but not stored for this object type, so it cannot be relied on to deduplicate a retried create; and ownerId defaults to the calling user, so a service-account caller that omits it creates a record with no owner, which owner-scoped list and query calls then cannot see. Such a caller can set the owner explicitly by putting a user id, or that user's email address, in crmObject.ownerId, and a value resolving to no user fails with INVALID_ARGUMENT. A user-token caller behaves differently: ownerId is resolved as a user id only, an email is not accepted, and anything that fails to resolve falls back to the calling user with no error. Requires a valid Vendasta IAM bearer token.

CRMCompanyService_GetMultiCompany

Claude
Retrieves companies by id, including the field schemas for the fields present on them. Use fieldMask.paths to limit which fields are returned, naming each as a fields.<fieldId> path (fields.<externalId> is accepted too); a read mask requires the fields.<...> form, and a bare id matches nothing. A company's related contacts and opportunities are relationships held as associations, not fields on the company. Retrieve them from the association list endpoint, narrowing filtersV2 with a filter on field id association_type plus one naming the company: for value Contact-Company set field id to_id to the company id, and for value Company-Opportunity set field id from_id to the company id. These filter field ids are literal values, in snake_case, and are not camel-cased the way JSON property names are. Requires a valid Vendasta IAM bearer token.

CRMCompanyService_ListCompanies

Claude
Lists companies in a namespace with optional free-text search, filtering, sorting, and pagination. filtersV2 and sortBy address fields by fieldId, which the field-schema list endpoint supplies. In filtersV2 a schema's external id is accepted in place of the field id and resolved to it, and an id matching no schema is rejected with INVALID_ARGUMENT rather than ignored. sortBy does not resolve external ids: it matches on fieldId alone, and a sort naming an external id or an id matching no schema is ignored rather than rejected. A company's related contacts and opportunities are relationships held as associations, not fields on the company. Retrieve them from the association list endpoint, narrowing filtersV2 with a filter on field id association_type plus one naming the company: for value Contact-Company set field id to_id to the company id, and for value Company-Opportunity set field id from_id to the company id. These filter field ids are literal values, in snake_case, and are not camel-cased the way JSON property names are. Requires a valid Vendasta IAM bearer token.

CRMCompanyService_UpdateCompany

Claude
Updates an existing company in the given namespace. Set crmObject.crmObjectId to identify it. Send fieldMask.paths with the specific fields.<fieldId> paths being changed, and only those fields are touched; omitting fieldMask replaces the whole field set but writes no top-level property, so changing ownerId always requires naming it in the mask. Top-level object properties such as ownerId use their own path rather than a fields. prefix. Field ids come from the field-schema list endpoint. Requires a valid Vendasta IAM bearer token.

CRMFieldSchemaService_ListFieldSchema

Claude
Lists the field schemas for a CRM object type, including custom fields. Set crmObjectType: omitting it matches no schema and comes back as an empty list rather than an error. To list the schemas for every object type in the namespace, send the literal wildcard "". Each schema's field id is what builds the fields.<fieldId> paths used in CRM object update field masks and returned by the get and list endpoints. A schema's external id is a second identifier for the same field, partner-defined for custom fields and of the form standard__ for Vendasta's built-ins; it can be sent in place of the field id inside a FieldValue (the field id wins when both are set), and a CRM object update mask accepts it as well: update masks match a bare field id, a bare external id, or either of those prefixed as fields.<...>. Read masks on the get endpoints are narrower and require the fields. prefix. Archived schemas are never returned by this endpoint. crmObjectSubtype and filters.namespace narrow the results further. Requires a valid Vendasta IAM bearer token.

CRMOpportunityService_CreateOpportunity

Claude
Requires the standard__opportunity_pipeline_id field (get a valid pipeline id from the List Pipelines endpoint) and standard__opportunity_name. The opportunity stage (standard__opportunity_calculated_stage_id) cannot be set directly; it is calculated from the opportunity field values. To place a deal in a stage, set standard__opportunity_probability (a float from 0 to 1) so the opportunity matches that stage filter (see the pipeline stages); standard__opportunity_status is read-only and derived from probability (0 = Closed Lost, 1 = Closed Won, anything else = Open), and probability defaults to 0.1 when omitted. standard__opportunity_amount is a currency value. Discover the exact standard__ field external IDs via the field schema for object type Opportunity. ownerId defaults to the calling user, so a service-account caller that omits it creates an opportunity with no owner, which owner-scoped list and query calls then cannot see; such a caller can set the owner explicitly by putting a user id, or that user's email address, in crmObject.ownerId, and a value resolving to no user fails with INVALID_ARGUMENT. A user-token caller behaves differently: ownerId is resolved as a user id only, an email is not accepted, and anything that fails to resolve falls back to the calling user with no error. Requires a valid Vendasta IAM bearer token.

CRMOpportunityService_GetMultiOpportunity

Claude
Retrieves opportunities by id, including their field schemas. An opportunity related company and contact are associations, not fields, so use the association endpoints to resolve them. Requires a valid Vendasta IAM bearer token.

CRMOpportunityService_ListOpportunities

Claude
Lists opportunities in a namespace with optional filtering, sorting, and pagination. An opportunity related company and contact are not fields on the opportunity; they are modeled as associations, so use the association endpoints to find them. Requires a valid Vendasta IAM bearer token.

CRMOpportunityService_UpdateOpportunity

Claude
The opportunity stage is calculated, not settable: to move an opportunity to another stage set standard__opportunity_probability (plus any other fields the target stage filter tests) so it matches the target stage filter (see the pipeline stages), and the calculated stage updates automatically. Send fieldMask.paths with the specific fields.<fieldId> paths being changed, and only those fields are touched — name and pipeline id need not be resent. Omitting fieldMask replaces the whole field set, which is the only reason the required fields (name and pipeline id) must be present in that form. Requires a valid Vendasta IAM bearer token.

CRMService_CreateContact

Claude
Creates a contact in the given namespace. The request message is shared with the company, opportunity, and custom-object create endpoints, so only contact fields apply here. Set values in crmObject.fields, each naming the field by fieldId (or by externalId, which for built-ins takes the form standard__*); discover both from the field-schema list endpoint for object type Contact. Omit crmObject.crmObjectId — the service assigns the id and returns it as crmObjectId in the response. Two fields behave differently here than their own documentation suggests: idempotencyId is accepted but not stored for this object type, so it cannot be relied on to deduplicate a retried create; and ownerId defaults to the calling user, so a service-account caller that omits it creates a record with no owner, which owner-scoped list and query calls then cannot see. Such a caller can set the owner explicitly by putting a user id, or that user's email address, in crmObject.ownerId, and a value resolving to no user fails with INVALID_ARGUMENT. A user-token caller behaves differently: ownerId is resolved as a user id only, an email is not accepted, and anything that fails to resolve falls back to the calling user with no error. Requires a valid Vendasta IAM bearer token.

CRMService_GetMultiContact

Claude
Retrieves contacts by id, including the field schemas for the fields present on them. Use fieldMask.paths to limit which fields are returned, naming each as a fields.<fieldId> path (fields.<externalId> is accepted too); a read mask requires the fields.<...> form, and a bare id matches nothing. A contact's opportunities and companies are relationships held as associations, not fields on the contact. Retrieve them from the association list endpoint, narrowing filtersV2 with a filter on field id association_type (value Contact-Opportunity or Contact-Company) and one on field id from_id set to the contact id. These filter field ids are literal values, in snake_case, and are not camel-cased the way JSON property names are. The contact's primary company is additionally mirrored onto the standard__contact_primary_company_id field, but that field is a denormalized copy kept for filtering and covers only the primary company; the Contact-Company association remains the source of truth, so resolve or verify a contact's company through the association rather than the field alone. Requires a valid Vendasta IAM bearer token.

CRMService_ListContacts

Claude
Lists contacts in a namespace with optional free-text search, filtering, sorting, and pagination. filtersV2 and sortBy address fields by fieldId, which the field-schema list endpoint supplies. In filtersV2 a schema's external id is accepted in place of the field id and resolved to it, and an id matching no schema is rejected with INVALID_ARGUMENT rather than ignored. sortBy does not resolve external ids: it matches on fieldId alone, and a sort naming an external id or an id matching no schema is ignored rather than rejected. A contact's opportunities and companies are relationships held as associations, not fields on the contact. Retrieve them from the association list endpoint, narrowing filtersV2 with a filter on field id association_type (value Contact-Opportunity or Contact-Company) and one on field id from_id set to the contact id. These filter field ids are literal values, in snake_case, and are not camel-cased the way JSON property names are. The contact's primary company is additionally mirrored onto the standard__contact_primary_company_id field, but that field is a denormalized copy kept for filtering and covers only the primary company; the Contact-Company association remains the source of truth, so resolve or verify a contact's company through the association rather than the field alone. Requires a valid Vendasta IAM bearer token.

CRMService_UpdateContact

Claude
Updates an existing contact in the given namespace. Set crmObject.crmObjectId to identify it. Send fieldMask.paths with the specific fields.<fieldId> paths being changed, and only those fields are touched; omitting fieldMask replaces the whole field set but writes no top-level property, so changing ownerId always requires naming it in the mask. Top-level object properties such as ownerId use their own path rather than a fields. prefix. Field ids come from the field-schema list endpoint. Requires a valid Vendasta IAM bearer token.

Pipelines_CreatePipeline

Claude
Creates a pipeline that drives stage calculation for its object type (usually Opportunity). Provide stages in order; stageId should be omitted, it is assigned by the server on create. Each stage needs a name, a filterGroup with at least one filter and a valid filterGroupOperator, and mutations. A stage filterGroup determines membership from the object field values (for opportunities, typically standard__opportunity_status and standard__opportunity_probability, for example status Open with probability greater than 0.2 and at most 0.3). Stages should cover the probability range 0 to 1 with no gaps or overlaps. An object calculated stage is derived by matching its field values against these filters; the stage is never set directly on the object. Stage mutations are applied on stage entry and are required. Changing a pipeline affects stage calculation for every object in it. For opportunity pipelines, standard__opportunity_status is typically Open, Closed Won, or Closed Lost. Stage mutations must reference fields by fieldId, not externalId. Requires a valid Vendasta IAM bearer token.

Pipelines_ListPipelines

Claude
Lists pipelines and their stages. Each stage filterGroup defines which objects fall in that stage (for opportunities, conditions over status and probability). Use this to determine which field values place an opportunity in a given stage, and to obtain a valid pipeline id for creating an opportunity. Wrap all arguments in a listOptions object; namespace goes inside listOptions (unlike the other list endpoints). Requires a valid Vendasta IAM bearer token.

get_doc

Claude
Fetch the body of a Vendasta documentation page. Takes a file_id from search_docs results and returns that document's body rather than the search excerpt — typically the full page as published (raw HTML, often large). Documents over 512 KB are truncated, and the truncation is marked in the returned text. A file_id is a signed token produced by search_docs; no other form of identifier is accepted. Input: file_id (string, required) — file_id from a search_docs result

search_docs

Claude
Search Vendasta's published documentation. Semantic search over one index covering three documentation sites: developers.vendasta.com — developer docs: API reference, auth, SSO, webhooks, marketplace/vendor integration docs.vendasta.com — partner/agency docs: Partner Center, white-label, campaigns, administration, selling docs.businessapp.io — end-user (SMB) docs: Business App features such as Inbox, Local SEO, reviews, social Returns short excerpts rather than whole documents. Inputs: query (string, required) — natural-language description of the topic limit (integer, optional, 1–10, default 5) — max results to return Returns a JSON object with a "results" array ordered by relevance, each with: title — human-readable document name (when available) content — an excerpt from the document file_id — signed identifier; get_doc accepts it to fetch the body similarity — relative ranking score; orders results but is not a relevance threshold (off-topic queries still return matches) citation — public URL of the source page The same page may appear more than once (results are page excerpts). The documents are reference material for developers. They are not part of this server's interface, and the tool schemas here describe what the API actually accepts.

Similar Apps