Folk MCP by usefulapi
Read and write Folk CRM people, companies, groups and notes.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"folk": {
"url": "https://folk.usefulapi.io/mcp"
}
}
}Remote endpoints
https://folk.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟢folk_get_current_user
Get the user associated with the current Folk API key. Folk REST: GET /v1/users/me.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_list_users(limit, cursor)
List users in the Folk workspace (id, name, email) — useful for resolving owner ids. Folk REST: GET /v1/users.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_list_people(limit, cursor, combinator, filter)
List/filter people (contacts). Supports cursor pagination and structured filters. Folk REST: GET /v1/people.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page.",
"type": "string"
},
"combinator": {
"description": "How to combine multiple filters — 'and' (all must match) or 'or' (any). Default 'and'.",
"type": "string",
"enum": [
"and",
"or"
]
},
"filter": {
"description": "Structured filter: attribute → operator → value, expanded to filter[attribute][operator]=value query keys. Example: {\"firstName\":{\"eq\":\"John\"}}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_get_person(id)
Get a single person (contact) by id. Folk REST: GET /v1/people/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The person id."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_list_companies(limit, cursor, combinator, filter)
List/filter companies. Supports cursor pagination and structured filters. Folk REST: GET /v1/companies.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page.",
"type": "string"
},
"combinator": {
"description": "How to combine multiple filters — 'and' (all must match) or 'or' (any). Default 'and'.",
"type": "string",
"enum": [
"and",
"or"
]
},
"filter": {
"description": "Structured filter: attribute → operator → value, expanded to filter[attribute][operator]=value query keys. Example: {\"firstName\":{\"eq\":\"John\"}}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_get_company(id)
Get a single company by id. Folk REST: GET /v1/companies/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The company id."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_list_groups(limit, cursor)
List groups in the Folk workspace (ids needed to place people/companies). Folk REST: GET /v1/groups.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_list_notes(limit, cursor, entity_id, query, created_after, ...)
List notes, optionally scoped to an entity or filtered by full text and creation date. Folk REST: GET /v1/notes.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pagination cursor — pass the value from a previous page's pagination.nextLink to fetch the next page.",
"type": "string"
},
"entity_id": {
"description": "Restrict to notes on this entity (person/company) id — maps to query key entity.id.",
"type": "string"
},
"query": {
"description": "Full-text search over note content.",
"type": "string"
},
"created_after": {
"description": "Only notes created after this ISO 8601 timestamp — maps to query createdAfter.",
"type": "string"
},
"created_before": {
"description": "Only notes created before this ISO 8601 timestamp — maps to query createdBefore.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢folk_get_note(id)
Get a single note by id. Folk REST: GET /v1/notes/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The note id."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴folk_create_person(firstName, lastName, fullName, description, birthday, ...)
Create a new person (contact). All fields are optional. Folk REST: POST /v1/people.
Input Schema
{
"type": "object",
"properties": {
"firstName": {
"description": "First name.",
"type": "string"
},
"lastName": {
"description": "Last name.",
"type": "string"
},
"fullName": {
"description": "Full name (if not split into first/last).",
"type": "string"
},
"description": {
"description": "Freeform description / notes.",
"type": "string"
},
"birthday": {
"description": "Birthday, formatted YYYY-MM-DD.",
"type": "string"
},
"gender": {
"type": "string",
"enum": [
"Male",
"Female",
"Unknown",
"Other"
],
"description": "Gender — one of Male, Female, Unknown, Other."
},
"jobTitle": {
"description": "Job title.",
"type": "string"
},
"emails": {
"description": "Email addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"phones": {
"description": "Phone numbers.",
"type": "array",
"items": {
"type": "string"
}
},
"addresses": {
"description": "Postal addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"urls": {
"description": "URLs (website, social, etc.).",
"type": "array",
"items": {
"type": "string"
}
},
"groups": {
"description": "Groups to add this person to (array of {id}).",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The group id."
}
},
"required": [
"id"
],
"description": "A reference to a group by id."
}
},
"companies": {
"description": "Companies this person is linked to (array of {id} or {name}).",
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The company id."
}
},
"required": [
"id"
]
},
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The company name (creates/links by name)."
}
},
"required": [
"name"
]
}
],
"description": "A reference to a company by id or by name."
}
},
"customFieldValues": {
"description": "Custom field values, keyed by field.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴folk_update_person(id, firstName, lastName, fullName, description, ...)
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}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The person id to update."
},
"firstName": {
"description": "First name.",
"type": "string"
},
"lastName": {
"description": "Last name.",
"type": "string"
},
"fullName": {
"description": "Full name.",
"type": "string"
},
"description": {
"description": "Freeform description / notes.",
"type": "string"
},
"birthday": {
"description": "Birthday, formatted YYYY-MM-DD.",
"type": "string"
},
"gender": {
"type": "string",
"enum": [
"Male",
"Female",
"Unknown",
"Other"
],
"description": "Gender — one of Male, Female, Unknown, Other."
},
"jobTitle": {
"description": "Job title.",
"type": "string"
},
"emails": {
"description": "Replace the person's email addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"phones": {
"description": "Replace the person's phone numbers.",
"type": "array",
"items": {
"type": "string"
}
},
"addresses": {
"description": "Replace the person's addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"urls": {
"description": "Replace the person's URLs.",
"type": "array",
"items": {
"type": "string"
}
},
"groups": {
"description": "Replace the person's groups (array of {id}).",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The group id."
}
},
"required": [
"id"
],
"description": "A reference to a group by id."
}
},
"companies": {
"description": "Replace the person's linked companies (array of {id} or {name}).",
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The company id."
}
},
"required": [
"id"
]
},
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The company name (creates/links by name)."
}
},
"required": [
"name"
]
}
],
"description": "A reference to a company by id or by name."
}
},
"customFieldValues": {
"description": "Custom field values, keyed by field.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴folk_create_company(name, description, fundingRaised, lastFundingDate, industry, ...)
Create a new company. `name` is required. Folk REST: POST /v1/companies.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The company name (required)."
},
"description": {
"description": "Freeform description / notes.",
"type": "string"
},
"fundingRaised": {
"description": "Total funding raised.",
"type": [
"string",
"number"
]
},
"lastFundingDate": {
"description": "Date of last funding round, formatted YYYY-MM-DD.",
"type": "string"
},
"industry": {
"description": "Industry.",
"type": "string"
},
"foundationYear": {
"description": "Year the company was founded.",
"type": [
"string",
"number"
]
},
"employeeRange": {
"type": "string",
"enum": [
"1-10",
"11-50",
"51-200",
"201-500",
"501-1000",
"1001-5000",
"5001-10000",
"10000+"
],
"description": "Employee-count range bucket."
},
"groups": {
"description": "Groups to add this company to (array of {id}).",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The group id."
}
},
"required": [
"id"
],
"description": "A reference to a group by id."
}
},
"addresses": {
"description": "Postal addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"emails": {
"description": "Email addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"phones": {
"description": "Phone numbers.",
"type": "array",
"items": {
"type": "string"
}
},
"urls": {
"description": "URLs (website, social, etc.).",
"type": "array",
"items": {
"type": "string"
}
},
"customFieldValues": {
"description": "Custom field values, keyed by field.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴folk_update_company(id, name, description, fundingRaised, lastFundingDate, ...)
Update fields on an existing company. Only provided fields are changed; list-valued fields REPLACE the existing values. Folk REST: PATCH /v1/companies/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The company id to update."
},
"name": {
"description": "The company name.",
"type": "string"
},
"description": {
"description": "Freeform description / notes.",
"type": "string"
},
"fundingRaised": {
"description": "Total funding raised.",
"type": [
"string",
"number"
]
},
"lastFundingDate": {
"description": "Date of last funding round, formatted YYYY-MM-DD.",
"type": "string"
},
"industry": {
"description": "Industry.",
"type": "string"
},
"foundationYear": {
"description": "Year the company was founded.",
"type": [
"string",
"number"
]
},
"employeeRange": {
"type": "string",
"enum": [
"1-10",
"11-50",
"51-200",
"201-500",
"501-1000",
"1001-5000",
"5001-10000",
"10000+"
],
"description": "Employee-count range bucket."
},
"groups": {
"description": "Replace the company's groups (array of {id}).",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The group id."
}
},
"required": [
"id"
],
"description": "A reference to a group by id."
}
},
"addresses": {
"description": "Replace the company's addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"emails": {
"description": "Replace the company's email addresses.",
"type": "array",
"items": {
"type": "string"
}
},
"phones": {
"description": "Replace the company's phone numbers.",
"type": "array",
"items": {
"type": "string"
}
},
"urls": {
"description": "Replace the company's URLs.",
"type": "array",
"items": {
"type": "string"
}
},
"customFieldValues": {
"description": "Custom field values, keyed by field.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴folk_create_note(entity_id, visibility, content, parent_note_id)
Create a note attached to an entity (person/company). Folk REST: POST /v1/notes.
Input Schema
{
"type": "object",
"properties": {
"entity_id": {
"type": "string",
"description": "Id of the entity (person/company) to attach the note to — maps to body entity:{id}."
},
"visibility": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Note visibility — 'public' (workspace) or 'private' (you)."
},
"content": {
"type": "string",
"description": "The note content."
},
"parent_note_id": {
"description": "Id of a parent note to reply under — maps to body parentNote:{id}.",
"type": "string"
}
},
"required": [
"entity_id",
"visibility",
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence