Revert CRM Integration
Workflow capability for building unified CRM integrations across Salesforce, HubSpot, Zoho CRM, Pipedrive, and Close CRM. Enables product teams to manage contacts, companies, deals, leads, tasks, events, and notes through a single normalized API with automatic OAuth and field mapping.
What You Can Do
MCP Tools
list-contacts
List all contacts from the tenant's connected CRM (Salesforce, HubSpot, Zoho, Pipedrive, or Close)
get-contact
Get details of a specific CRM contact by ID
create-contact
Create a new contact in the tenant's CRM
update-contact
Update an existing CRM contact
search-contacts
Search CRM contacts using filter criteria
list-companies
List all companies/accounts from the tenant's CRM
create-company
Create a new company/account in the CRM
list-deals
List all deals/opportunities in the CRM pipeline
create-deal
Create a new deal/opportunity in the CRM pipeline
list-leads
List all leads in the CRM
create-lead
Create a new lead in the CRM
get-connection-status
Get OAuth connection status and details for a tenant
Capability Spec
naftiko: 1.0.0-alpha2
info:
label: Revert CRM Integration
description: Workflow capability for building unified CRM integrations across Salesforce, HubSpot, Zoho CRM, Pipedrive,
and Close CRM. Enables product teams to manage contacts, companies, deals, leads, tasks, events, and notes through a single
normalized API with automatic OAuth and field mapping.
tags:
- Revert
- CRM
- Integrations
- Salesforce
- HubSpot
- Pipedrive
created: '2026-05-02'
modified: '2026-05-06'
binds:
- namespace: env
keys:
REVERT_API_TOKEN: REVERT_API_TOKEN
REVERT_TENANT_ID: REVERT_TENANT_ID
capability:
consumes:
- type: http
namespace: revert
baseUri: https://api.revert.dev
description: Revert Unified API for CRM, ticketing, chat, and accounting integrations
authentication:
type: apikey
key: x-revert-api-token
value: '{{REVERT_API_TOKEN}}'
placement: header
resources:
- name: connections
path: /connection
description: Manage third-party OAuth connections and webhooks
operations:
- name: get-connection
method: GET
description: Get details of a connection for a specific tenant
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: The unique customer id used when the customer linked their account
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-connection-webhook
method: POST
description: Create a webhook for a tenant connection
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: The unique customer tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
webhookUrl: '{{tools.webhookUrl}}'
- name: crm-contacts
path: /crm/contacts
description: Unified CRM contact operations
operations:
- name: get-contacts
method: GET
description: Get all CRM contacts with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: fields
in: query
type: string
required: false
description: Comma-separated list of fields
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
- name: cursor
in: query
type: string
required: false
description: Pagination cursor
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: get-contact
method: GET
description: Get details of a specific CRM contact by ID
inputParameters:
- name: id
in: path
type: string
required: true
description: Contact ID
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-contact
method: POST
description: Create a new CRM contact
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
firstName: '{{tools.firstName}}'
lastName: '{{tools.lastName}}'
email: '{{tools.email}}'
- name: update-contact
method: PATCH
description: Update an existing CRM contact
inputParameters:
- name: id
in: path
type: string
required: true
description: Contact ID
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: search-contacts
method: POST
description: Search CRM contacts by criteria
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
searchCriteria: '{{tools.searchCriteria}}'
- name: crm-companies
path: /crm/companies
description: Unified CRM company/account operations
operations:
- name: get-companies
method: GET
description: Get all CRM companies/accounts with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
- name: cursor
in: query
type: string
required: false
description: Pagination cursor
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-company
method: POST
description: Create a new CRM company/account
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
name: '{{tools.name}}'
website: '{{tools.website}}'
- name: crm-deals
path: /crm/deals
description: Unified CRM deal/opportunity operations
operations:
- name: get-deals
method: GET
description: Get all CRM deals/opportunities with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
- name: cursor
in: query
type: string
required: false
description: Pagination cursor
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-deal
method: POST
description: Create a new CRM deal/opportunity
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
name: '{{tools.name}}'
amount: '{{tools.amount}}'
stage: '{{tools.stage}}'
- name: crm-leads
path: /crm/leads
description: Unified CRM lead operations
operations:
- name: get-leads
method: GET
description: Get all CRM leads with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-lead
method: POST
description: Create a new CRM lead
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
firstName: '{{tools.firstName}}'
lastName: '{{tools.lastName}}'
email: '{{tools.email}}'
- name: ticket-tasks
path: /ticket/tasks
description: Unified ticketing task operations
operations:
- name: get-ticket-tasks
method: GET
description: Get all ticketing tasks with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: create-ticket-task
method: POST
description: Create a new ticketing task
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
title: '{{tools.title}}'
description: '{{tools.description}}'
priority: '{{tools.priority}}'
- name: chat-messages
path: /chat/messages
description: Unified chat message operations
operations:
- name: get-messages
method: GET
description: Get chat messages with pagination
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
- name: pageSize
in: query
type: string
required: false
description: Number of results per page
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
- name: send-message
method: POST
description: Send a new chat message to a channel
inputParameters:
- name: x-revert-t-id
in: header
type: string
required: true
description: Tenant ID
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
body:
type: json
data:
text: '{{tools.text}}'
channelId: '{{tools.channelId}}'
exposes:
- type: rest
port: 8080
namespace: revert-crm-api
description: Unified REST API for CRM integration workflows.
resources:
- path: /v1/contacts
name: contacts
description: Unified contact management across all connected CRMs
operations:
- method: GET
name: list-contacts
description: List all contacts from the tenant's connected CRM
call: revert.get-contacts
with:
x-revert-t-id: rest.tenant_id
pageSize: rest.page_size
cursor: rest.cursor
fields: rest.fields
outputParameters:
- type: object
mapping: $.
- method: POST
name: create-contact
description: Create a new contact in the tenant's CRM
call: revert.create-contact
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/contacts/{id}
name: contact
description: Individual contact operations
operations:
- method: GET
name: get-contact
description: Get a specific contact by ID
call: revert.get-contact
with:
id: rest.id
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- method: PATCH
name: update-contact
description: Update an existing contact
call: revert.update-contact
with:
id: rest.id
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/contacts/search
name: contact-search
description: Search contacts by criteria
operations:
- method: POST
name: search-contacts
description: Search contacts using filter criteria
call: revert.search-contacts
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/companies
name: companies
description: Unified company/account management
operations:
- method: GET
name: list-companies
description: List all companies from the tenant's CRM
call: revert.get-companies
with:
x-revert-t-id: rest.tenant_id
pageSize: rest.page_size
cursor: rest.cursor
outputParameters:
- type: object
mapping: $.
- method: POST
name: create-company
description: Create a new company/account in the CRM
call: revert.create-company
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/deals
name: deals
description: Unified deal/opportunity pipeline management
operations:
- method: GET
name: list-deals
description: List all deals/opportunities from the tenant's CRM
call: revert.get-deals
with:
x-revert-t-id: rest.tenant_id
pageSize: rest.page_size
cursor: rest.cursor
outputParameters:
- type: object
mapping: $.
- method: POST
name: create-deal
description: Create a new deal/opportunity in the CRM
call: revert.create-deal
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/leads
name: leads
description: Unified lead management
operations:
- method: GET
name: list-leads
description: List all leads from the tenant's CRM
call: revert.get-leads
with:
x-revert-t-id: rest.tenant_id
pageSize: rest.page_size
outputParameters:
- type: object
mapping: $.
- method: POST
name: create-lead
description: Create a new lead in the CRM
call: revert.create-lead
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- path: /v1/connections
name: connections
description: Tenant OAuth connection management
operations:
- method: GET
name: get-connection
description: Get OAuth connection status for a tenant
call: revert.get-connection
with:
x-revert-t-id: rest.tenant_id
outputParameters:
- type: object
mapping: $.
- type: mcp
port: 9080
namespace: revert-crm-mcp
transport: http
description: MCP server for AI-assisted CRM integration workflows.
tools:
- name: list-contacts
description: List all contacts from the tenant's connected CRM (Salesforce, HubSpot, Zoho, Pipedrive, or Close)
hints:
readOnly: true
openWorld: true
call: revert.get-contacts
with:
x-revert-t-id: tools.tenant_id
pageSize: tools.page_size
cursor: tools.cursor
outputParameters:
- type: object
mapping: $.
- name: get-contact
description: Get details of a specific CRM contact by ID
hints:
readOnly: true
openWorld: false
call: revert.get-contact
with:
id: tools.contact_id
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: create-contact
description: Create a new contact in the tenant's CRM
hints:
readOnly: false
destructive: false
idempotent: false
call: revert.create-contact
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: update-contact
description: Update an existing CRM contact
hints:
readOnly: false
destructive: false
idempotent: true
call: revert.update-contact
with:
id: tools.contact_id
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: search-contacts
description: Search CRM contacts using filter criteria
hints:
readOnly: true
openWorld: true
call: revert.search-contacts
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: list-companies
description: List all companies/accounts from the tenant's CRM
hints:
readOnly: true
openWorld: true
call: revert.get-companies
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: create-company
description: Create a new company/account in the CRM
hints:
readOnly: false
destructive: false
idempotent: false
call: revert.create-company
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: list-deals
description: List all deals/opportunities in the CRM pipeline
hints:
readOnly: true
openWorld: true
call: revert.get-deals
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: create-deal
description: Create a new deal/opportunity in the CRM pipeline
hints:
readOnly: false
destructive: false
idempotent: false
call: revert.create-deal
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: list-leads
description: List all leads in the CRM
hints:
readOnly: true
openWorld: true
call: revert.get-leads
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: create-lead
description: Create a new lead in the CRM
hints:
readOnly: false
destructive: false
idempotent: false
call: revert.create-lead
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.
- name: get-connection-status
description: Get OAuth connection status and details for a tenant
hints:
readOnly: true
openWorld: false
call: revert.get-connection
with:
x-revert-t-id: tools.tenant_id
outputParameters:
- type: object
mapping: $.