twenty
What this MCP does
Manages Twenty CRM records for people, companies, opportunities, notes, and tasks, including listing, creation, and updates.
Tools
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The company name (required).'}, 'xUrl': {'type': 'string', 'description': 'X/Twitter URL (sent as xLink:{primaryLinkUrl}).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'employees': {'type': 'number', 'description': 'Employee count.'}, 'domainName': {'type': 'string', 'description': 'Primary domain / website URL (sent as domainName:{primaryLinkUrl}).'}, 'addressCity': {'type': 'string', 'description': 'City (sent as address:{addressCity}).'}, 'linkedinUrl': {'type': 'string', 'description': 'LinkedIn URL (sent as linkedinLink:{primaryLinkUrl}).'}, 'idealCustomerProfile': {'type': 'boolean', 'description': 'Whether this company matches the ideal customer profile.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['title'], 'properties': {'body': {'type': 'string', 'description': 'The note content/body.'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'The note title (required).'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The opportunity name (required).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'stage': {'type': 'string', 'description': 'Pipeline stage — e.g. SCREENING, MEETING, PROPOSAL, NEGOTIATION, CUSTOMER (custom pipelines vary).'}, 'closeDate': {'type': 'string', 'description': 'Expected close date (ISO 8601).'}, 'companyId': {'type': 'string', 'description': 'Id of the associated company.'}, 'amountMicros': {'type': 'number', 'description': 'Opportunity amount in micros (× 1,000,000). Sent as amount:{amountMicros,currencyCode}.'}, 'currencyCode': {'type': 'string', 'default': 'USD', 'description': 'Currency code for the amount (default USD; only sent when amountMicros is provided).'}, 'pointOfContactId': {'type': 'string', 'description': 'Id of the point-of-contact person.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'city': {'type': 'string', 'description': 'City.'}, 'xUrl': {'type': 'string', 'description': 'X/Twitter URL (sent as xLink:{primaryLinkUrl}).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'jobTitle': {'type': 'string', 'description': 'Job title.'}, 'lastName': {'type': 'string', 'description': 'Last name (combined into name:{firstName,lastName}).'}, 'companyId': {'type': 'string', 'description': 'Id of the company to link this person to.'}, 'firstName': {'type': 'string', 'description': 'First name (combined into name:{firstName,lastName}).'}, 'linkedinUrl': {'type': 'string', 'description': 'LinkedIn URL (sent as linkedinLink:{primaryLinkUrl}).'}, 'primaryEmail': {'type': 'string', 'description': 'Primary email address (sent as emails:{primaryEmail}).'}, 'primaryPhone': {'type': 'string', 'description': 'Primary phone number (sent as phones:{primaryPhoneNumber}).'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['title'], 'properties': {'body': {'type': 'string', 'description': 'Task body / description.'}, 'dueAt': {'type': 'string', 'description': 'Due date/time (ISO 8601).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'The task title (required).'}, 'status': {'type': 'string', 'description': 'Task status — e.g. TODO, IN_PROGRESS, DONE.'}, 'assigneeId': {'type': 'string', 'description': 'Id of the workspace member assigned to the task.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The company id.'}, 'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The note id.'}, 'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The opportunity id.'}, 'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The person id.'}, 'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The task id.'}, 'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}, 'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Results per page (1-60, default 20 — Twenty caps at 60).'}, 'filter': {'type': 'string', 'description': 'Raw Twenty filter string, passed verbatim as ?filter=. Syntax: field[comparator]:value, e.g. `employees[gte]:100` or `stage[eq]:"MEETING"`. Comparators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith.'}, 'order_by': {'type': 'string', 'description': 'Raw Twenty ordering string, passed verbatim as ?order_by=, e.g. `createdAt[DescNullsLast]`.'}, 'ending_before': {'type': 'string', 'description': "Pagination cursor — return records before this cursor (from a previous page's pageInfo)."}, 'starting_after': {'type': 'string', 'description': "Pagination cursor — return records after this cursor (from a previous page's pageInfo)."}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}, 'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Results per page (1-60, default 20 — Twenty caps at 60).'}, 'filter': {'type': 'string', 'description': 'Raw Twenty filter string, passed verbatim as ?filter=. Syntax: field[comparator]:value, e.g. `employees[gte]:100` or `stage[eq]:"MEETING"`. Comparators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith.'}, 'order_by': {'type': 'string', 'description': 'Raw Twenty ordering string, passed verbatim as ?order_by=, e.g. `createdAt[DescNullsLast]`.'}, 'ending_before': {'type': 'string', 'description': "Pagination cursor — return records before this cursor (from a previous page's pageInfo)."}, 'starting_after': {'type': 'string', 'description': "Pagination cursor — return records after this cursor (from a previous page's pageInfo)."}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}, 'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Results per page (1-60, default 20 — Twenty caps at 60).'}, 'filter': {'type': 'string', 'description': 'Raw Twenty filter string, passed verbatim as ?filter=. Syntax: field[comparator]:value, e.g. `employees[gte]:100` or `stage[eq]:"MEETING"`. Comparators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith.'}, 'order_by': {'type': 'string', 'description': 'Raw Twenty ordering string, passed verbatim as ?order_by=, e.g. `createdAt[DescNullsLast]`.'}, 'ending_before': {'type': 'string', 'description': "Pagination cursor — return records before this cursor (from a previous page's pageInfo)."}, 'starting_after': {'type': 'string', 'description': "Pagination cursor — return records after this cursor (from a previous page's pageInfo)."}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}, 'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Results per page (1-60, default 20 — Twenty caps at 60).'}, 'filter': {'type': 'string', 'description': 'Raw Twenty filter string, passed verbatim as ?filter=. Syntax: field[comparator]:value, e.g. `employees[gte]:100` or `stage[eq]:"MEETING"`. Comparators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith.'}, 'order_by': {'type': 'string', 'description': 'Raw Twenty ordering string, passed verbatim as ?order_by=, e.g. `createdAt[DescNullsLast]`.'}, 'ending_before': {'type': 'string', 'description': "Pagination cursor — return records before this cursor (from a previous page's pageInfo)."}, 'starting_after': {'type': 'string', 'description': "Pagination cursor — return records after this cursor (from a previous page's pageInfo)."}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'depth': {'type': 'integer', 'maximum': 2, 'minimum': 0, 'description': 'How deep to hydrate related records: 0, 1, or 2.'}, 'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Results per page (1-60, default 20 — Twenty caps at 60).'}, 'filter': {'type': 'string', 'description': 'Raw Twenty filter string, passed verbatim as ?filter=. Syntax: field[comparator]:value, e.g. `employees[gte]:100` or `stage[eq]:"MEETING"`. Comparators: eq, neq, gt, gte, lt, lte, in, is, like, ilike, startsWith.'}, 'order_by': {'type': 'string', 'description': 'Raw Twenty ordering string, passed verbatim as ?order_by=, e.g. `createdAt[DescNullsLast]`.'}, 'ending_before': {'type': 'string', 'description': "Pagination cursor — return records before this cursor (from a previous page's pageInfo)."}, 'starting_after': {'type': 'string', 'description': "Pagination cursor — return records after this cursor (from a previous page's pageInfo)."}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The company id to update.'}, 'name': {'type': 'string', 'description': 'The company name.'}, 'xUrl': {'type': 'string', 'description': 'X/Twitter URL (sent as xLink:{primaryLinkUrl}).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'employees': {'type': 'number', 'description': 'Employee count.'}, 'domainName': {'type': 'string', 'description': 'Primary domain / website URL (sent as domainName:{primaryLinkUrl}).'}, 'addressCity': {'type': 'string', 'description': 'City (sent as address:{addressCity}).'}, 'linkedinUrl': {'type': 'string', 'description': 'LinkedIn URL (sent as linkedinLink:{primaryLinkUrl}).'}, 'idealCustomerProfile': {'type': 'boolean', 'description': 'Whether this company matches the ideal customer profile.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The opportunity id to update.'}, 'name': {'type': 'string', 'description': 'The opportunity name.'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'stage': {'type': 'string', 'description': 'Pipeline stage — e.g. SCREENING, MEETING, PROPOSAL, NEGOTIATION, CUSTOMER (custom pipelines vary).'}, 'closeDate': {'type': 'string', 'description': 'Expected close date (ISO 8601).'}, 'companyId': {'type': 'string', 'description': 'Id of the associated company.'}, 'amountMicros': {'type': 'number', 'description': 'Opportunity amount in micros (× 1,000,000). Sent as amount:{amountMicros,currencyCode}.'}, 'currencyCode': {'type': 'string', 'default': 'USD', 'description': 'Currency code for the amount (default USD; only sent when amountMicros is provided).'}, 'pointOfContactId': {'type': 'string', 'description': 'Id of the point-of-contact person.'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The person id to update.'}, 'city': {'type': 'string', 'description': 'City.'}, 'xUrl': {'type': 'string', 'description': 'X/Twitter URL (sent as xLink:{primaryLinkUrl}).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'jobTitle': {'type': 'string', 'description': 'Job title.'}, 'lastName': {'type': 'string', 'description': 'Last name (combined into name:{firstName,lastName}).'}, 'companyId': {'type': 'string', 'description': 'Id of the company to link this person to.'}, 'firstName': {'type': 'string', 'description': 'First name (combined into name:{firstName,lastName}).'}, 'linkedinUrl': {'type': 'string', 'description': 'LinkedIn URL (sent as linkedinLink:{primaryLinkUrl}).'}, 'primaryEmail': {'type': 'string', 'description': 'Primary email address (sent as emails:{primaryEmail}).'}, 'primaryPhone': {'type': 'string', 'description': 'Primary phone number (sent as phones:{primaryPhoneNumber}).'}}}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The task id to update.'}, 'body': {'type': 'string', 'description': 'Task body / description.'}, 'dueAt': {'type': 'string', 'description': 'Due date/time (ISO 8601).'}, 'extra': {'type': 'object', 'description': 'Passthrough object of additional/custom fields merged into the request body verbatim.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'The task title.'}, 'status': {'type': 'string', 'description': 'Task status — e.g. TODO, IN_PROGRESS, DONE.'}, 'assigneeId': {'type': 'string', 'description': 'Id of the workspace member assigned to the task.'}}}
Recent tool changes
Similar MCP servers
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
GestãoClick
Connects to the GestãoClick ERP to manage customers, suppliers, products, sales, service orders, budgets, and financial records.
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
Coordinalo — Service Business Operations
Manages appointment-based service businesses, including clients, providers, services, availability, public booking agendas, recur…
StackFast FractWin Expert Brain
Provides governed sales, negotiation, strategy, operations, CRM, estimation, artifact, and risk-management workflows with human a…
GrowthKit Revenue Intelligence
Supports B2B revenue operations with lead campaigns, ICP and company enrichment, CRM records and activities, outreach drafting, t…
KaiCalls
Provides AI phone reception, outbound calling campaigns, call transcripts and recordings, lead management, routing, staff alerts,…