MCP Server

folk

io.usefulapi/folk
Sales & CRM Public & reachable MCP 2026-07-28

What this MCP does

Reads and writes Folk CRM people, companies, groups, users, and notes.

folk_create_company
Create company
Create a new company. `name` is required. Folk REST: POST /v1/companies.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The company name (required).'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'URLs (website, social, etc.).'}, 'emails': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Email addresses.'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The group id.'}}, 'description': 'A reference to a group by id.'}, 'description': 'Groups to add this company to (array of {id}).'}, 'phones': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Phone numbers.'}, 'industry': {'type': 'string', 'description': 'Industry.'}, 'addresses': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Postal addresses.'}, 'description': {'type': 'string', 'description': 'Freeform description / notes.'}, 'employeeRange': {'enum': ['1-10', '11-50', '51-200', '201-500', '501-1000', '1001-5000', '5001-10000', '10000+'], 'type': 'string', 'description': 'Employee-count range bucket.'}, 'fundingRaised': {'type': ['string', 'number'], 'description': 'Total funding raised.'}, 'foundationYear': {'type': ['string', 'number'], 'description': 'Year the company was founded.'}, 'lastFundingDate': {'type': 'string', 'description': 'Date of last funding round, formatted YYYY-MM-DD.'}, 'customFieldValues': {'type': 'object', 'description': 'Custom field values, keyed by field.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
folk_create_note
Create note
Create a note attached to an entity (person/company). Folk REST: POST /v1/notes.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['entity_id', 'visibility', 'content'], 'properties': {'content': {'type': 'string', 'description': 'The note content.'}, 'entity_id': {'type': 'string', 'description': 'Id of the entity (person/company) to attach the note to — maps to body entity:{id}.'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': "Note visibility — 'public' (workspace) or 'private' (you)."}, 'parent_note_id': {'type': 'string', 'description': 'Id of a parent note to reply under — maps to body parentNote:{id}.'}}}
folk_create_person
Create person
Create a new person (contact). All fields are optional. Folk REST: POST /v1/people.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'URLs (website, social, etc.).'}, 'emails': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Email addresses.'}, 'gender': {'enum': ['Male', 'Female', 'Unknown', 'Other'], 'type': 'string', 'description': 'Gender — one of Male, Female, Unknown, Other.'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The group id.'}}, 'description': 'A reference to a group by id.'}, 'description': 'Groups to add this person to (array of {id}).'}, 'phones': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Phone numbers.'}, 'birthday': {'type': 'string', 'description': 'Birthday, formatted YYYY-MM-DD.'}, 'fullName': {'type': 'string', 'description': 'Full name (if not split into first/last).'}, 'jobTitle': {'type': 'string', 'description': 'Job title.'}, 'lastName': {'type': 'string', 'description': 'Last name.'}, 'addresses': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Postal addresses.'}, 'companies': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The company id.'}}}, {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The company name (creates/links by name).'}}}], 'description': 'A reference to a company by id or by name.'}, 'description': 'Companies this person is linked to (array of {id} or {name}).'}, 'firstName': {'type': 'string', 'description': 'First name.'}, 'description': {'type': 'string', 'description': 'Freeform description / notes.'}, 'customFieldValues': {'type': 'object', 'description': 'Custom field values, keyed by field.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
folk_get_company
Get company
Get a single company by id. Folk REST: GET /v1/companies/{id}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The company id.'}}}
folk_get_current_user
Get current user
Get the user associated with the current Folk API key. Folk REST: GET /v1/users/me.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
folk_get_note
Get note
Get a single note by id. Folk REST: GET /v1/notes/{id}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The note id.'}}}
folk_get_person
Get person
Get a single person (contact) by id. Folk REST: GET /v1/people/{id}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The person id.'}}}
folk_list_companies
List companies
List/filter companies. Supports cursor pagination and structured filters. Folk REST: GET /v1/companies.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100, default 20).'}, 'cursor': {'type': 'string', 'description': "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page."}, 'filter': {'type': 'object', 'description': 'Structured filter: attribute → operator → value, expanded to filter[attribute][operator]=value query keys. Example: {"firstName":{"eq":"John"}}.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': ['string', 'number', 'boolean']}}}, 'combinator': {'enum': ['and', 'or'], 'type': 'string', 'description': "How to combine multiple filters — 'and' (all must match) or 'or' (any). Default 'and'."}}}
folk_list_groups
List groups
List groups in the Folk workspace (ids needed to place people/companies). Folk REST: GET /v1/groups.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100, default 20).'}, 'cursor': {'type': 'string', 'description': "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page."}}}
folk_list_notes
List notes
List notes, optionally scoped to an entity or filtered by full text and creation date. Folk REST: GET /v1/notes.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100, default 20).'}, 'query': {'type': 'string', 'description': 'Full-text search over note content.'}, 'cursor': {'type': 'string', 'description': "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page."}, 'entity_id': {'type': 'string', 'description': 'Restrict to notes on this entity (person/company) id — maps to query key entity.id.'}, 'created_after': {'type': 'string', 'description': 'Only notes created after this ISO 8601 timestamp — maps to query createdAfter.'}, 'created_before': {'type': 'string', 'description': 'Only notes created before this ISO 8601 timestamp — maps to query createdBefore.'}}}
folk_list_people
List people
List/filter people (contacts). Supports cursor pagination and structured filters. Folk REST: GET /v1/people.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100, default 20).'}, 'cursor': {'type': 'string', 'description': "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page."}, 'filter': {'type': 'object', 'description': 'Structured filter: attribute → operator → value, expanded to filter[attribute][operator]=value query keys. Example: {"firstName":{"eq":"John"}}.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': ['string', 'number', 'boolean']}}}, 'combinator': {'enum': ['and', 'or'], 'type': 'string', 'description': "How to combine multiple filters — 'and' (all must match) or 'or' (any). Default 'and'."}}}
folk_list_users
List users
List users in the Folk workspace (id, name, email) — useful for resolving owner ids. Folk REST: GET /v1/users.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100, default 20).'}, 'cursor': {'type': 'string', 'description': "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page."}}}
folk_update_company
Update company
Update fields on an existing company. Only provided fields are changed; list-valued fields REPLACE the existing values. Folk REST: PATCH /v1/companies/{id}.
Destructive
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.'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the company's URLs."}, 'emails': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the company's email addresses."}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The group id.'}}, 'description': 'A reference to a group by id.'}, 'description': "Replace the company's groups (array of {id})."}, 'phones': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the company's phone numbers."}, 'industry': {'type': 'string', 'description': 'Industry.'}, 'addresses': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the company's addresses."}, 'description': {'type': 'string', 'description': 'Freeform description / notes.'}, 'employeeRange': {'enum': ['1-10', '11-50', '51-200', '201-500', '501-1000', '1001-5000', '5001-10000', '10000+'], 'type': 'string', 'description': 'Employee-count range bucket.'}, 'fundingRaised': {'type': ['string', 'number'], 'description': 'Total funding raised.'}, 'foundationYear': {'type': ['string', 'number'], 'description': 'Year the company was founded.'}, 'lastFundingDate': {'type': 'string', 'description': 'Date of last funding round, formatted YYYY-MM-DD.'}, 'customFieldValues': {'type': 'object', 'description': 'Custom field values, keyed by field.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
folk_update_person
Update person
Update fields on an existing person. Only provided fields are changed; list-valued fields (emails, phones, groups, companies, etc.) REPLACE the existing values. Folk REST: PATCH /v1/people/{id}.
Destructive
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.'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the person's URLs."}, 'emails': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the person's email addresses."}, 'gender': {'enum': ['Male', 'Female', 'Unknown', 'Other'], 'type': 'string', 'description': 'Gender — one of Male, Female, Unknown, Other.'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The group id.'}}, 'description': 'A reference to a group by id.'}, 'description': "Replace the person's groups (array of {id})."}, 'phones': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the person's phone numbers."}, 'birthday': {'type': 'string', 'description': 'Birthday, formatted YYYY-MM-DD.'}, 'fullName': {'type': 'string', 'description': 'Full name.'}, 'jobTitle': {'type': 'string', 'description': 'Job title.'}, 'lastName': {'type': 'string', 'description': 'Last name.'}, 'addresses': {'type': 'array', 'items': {'type': 'string'}, 'description': "Replace the person's addresses."}, 'companies': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The company id.'}}}, {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The company name (creates/links by name).'}}}], 'description': 'A reference to a company by id or by name.'}, 'description': "Replace the person's linked companies (array of {id} or {name})."}, 'firstName': {'type': 'string', 'description': 'First name.'}, 'description': {'type': 'string', 'description': 'Freeform description / notes.'}, 'customFieldValues': {'type': 'object', 'description': 'Custom field values, keyed by field.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
Changed
folk_create_note
Oct. 2, 2026, 2:40 a.m.
Changed
folk_update_company
Oct. 2, 2026, 2:40 a.m.
Changed
folk_create_company
Oct. 2, 2026, 2:40 a.m.
Changed
folk_update_person
Oct. 2, 2026, 2:40 a.m.
Changed
folk_create_person
Oct. 2, 2026, 2:40 a.m.
Changed
folk_get_note
Oct. 2, 2026, 2:40 a.m.
Changed
folk_list_notes
Oct. 2, 2026, 2:40 a.m.
Changed
folk_list_groups
Oct. 2, 2026, 2:40 a.m.
Changed
folk_get_company
Oct. 2, 2026, 2:40 a.m.
Changed
folk_list_companies
Oct. 2, 2026, 2:40 a.m.
Changed
folk_get_person
Oct. 2, 2026, 2:40 a.m.
Changed
folk_list_people
Oct. 2, 2026, 2:40 a.m.
Changed
folk_list_users
Oct. 2, 2026, 2:40 a.m.
Changed
folk_get_current_user
Oct. 2, 2026, 2:40 a.m.
Added
folk_create_note
Sept. 30, 2026, 2:40 a.m.
Added
folk_update_company
Sept. 30, 2026, 2:40 a.m.
Added
folk_create_company
Sept. 30, 2026, 2:40 a.m.
Added
folk_update_person
Sept. 30, 2026, 2:40 a.m.
Added
folk_create_person
Sept. 30, 2026, 2:40 a.m.
Added
folk_get_note
Sept. 30, 2026, 2:40 a.m.
Added
folk_list_notes
Sept. 30, 2026, 2:40 a.m.
Added
folk_list_groups
Sept. 30, 2026, 2:40 a.m.
Added
folk_get_company
Sept. 30, 2026, 2:40 a.m.
Added
folk_list_companies
Sept. 30, 2026, 2:40 a.m.
Added
folk_get_person
Sept. 30, 2026, 2:40 a.m.
Added
folk_list_people
Sept. 30, 2026, 2:40 a.m.
Added
folk_list_users
Sept. 30, 2026, 2:40 a.m.
Added
folk_get_current_user
Sept. 30, 2026, 2:40 a.m.