Skip to content

Twenty MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Read people, companies, opportunities, notes and tasks; create and update records in Twenty CRM.

Deletes · 9

20 tools: 9 can delete or cancel things and 11 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http twenty https://twenty.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

20 tools

Deletes or cancels 9Claude Code: deny
  • twenty_create_companyCreate a new company.No findings

    Why it is in this group

    • The name "twenty_create_company" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new company. `name` is required. Twenty REST: POST /rest/companies.

    Annotations the server declares

    • title: Create company
    • destructiveHint: true
  • twenty_create_noteCreate a note.No findings

    Why it is in this group

    • The name "twenty_create_note" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a note. `title` is required; `body` holds the note content. (Attaching to records via noteTargets is out of scope.) Twenty REST: POST /rest/notes.

    Annotations the server declares

    • title: Create note
    • destructiveHint: true
  • twenty_create_opportunityCreate a new opportunity (deal).No findings

    Why it is in this group

    • The name "twenty_create_opportunity" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new opportunity (deal). `name` is required; amountMicros combines with currencyCode into amount:{amountMicros,currencyCode}. Twenty REST: POST /rest/opportunities.

    Annotations the server declares

    • title: Create opportunity
    • destructiveHint: true
  • twenty_create_personCreate a new person (contact).No findings

    Why it is in this group

    • The name "twenty_create_person" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new person (contact). All fields optional; firstName/lastName combine into name:{firstName,lastName}. Twenty REST: POST /rest/people.

    Annotations the server declares

    • title: Create person
    • destructiveHint: true
  • twenty_create_taskCreate a task.No findings

    Why it is in this group

    • The name "twenty_create_task" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a task. `title` is required. Twenty REST: POST /rest/tasks.

    Annotations the server declares

    • title: Create task
    • destructiveHint: true
  • twenty_update_companyUpdate fields on an existing company.No findings

    Why it is in this group

    • The name "twenty_update_company" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update fields on an existing company. Only provided fields change. Twenty REST: PATCH /rest/companies/{id}.

    Annotations the server declares

    • title: Update company
    • destructiveHint: true
  • twenty_update_opportunityUpdate fields on an existing opportunity.No findings

    Why it is in this group

    • The name "twenty_update_opportunity" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update fields on an existing opportunity. Only provided fields change. Twenty REST: PATCH /rest/opportunities/{id}.

    Annotations the server declares

    • title: Update opportunity
    • destructiveHint: true
  • twenty_update_personUpdate fields on an existing person.No findings

    Why it is in this group

    • The name "twenty_update_person" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update fields on an existing person. Only provided fields change. Twenty REST: PATCH /rest/people/{id}.

    Annotations the server declares

    • title: Update person
    • destructiveHint: true
  • twenty_update_taskUpdate fields on an existing task.No findings

    Why it is in this group

    • The name "twenty_update_task" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update fields on an existing task. Only provided fields change. Twenty REST: PATCH /rest/tasks/{id}.

    Annotations the server declares

    • title: Update task
    • destructiveHint: true
Only reads 11Claude Code: allow
  • twenty_get_companyGet a single company by id.No findings

    Why it is in this group

    • The name "twenty_get_company" says "get": a word for reading.
    Description, as the server wrote it
    Get a single company by id. Twenty REST: GET /rest/companies/{id}.

    Annotations the server declares

    • title: Get company
    • readOnlyHint: true
  • twenty_get_noteGet a single note by id.No findings

    Why it is in this group

    • The name "twenty_get_note" says "get": a word for reading.
    Description, as the server wrote it
    Get a single note by id. Twenty REST: GET /rest/notes/{id}.

    Annotations the server declares

    • title: Get note
    • readOnlyHint: true
  • twenty_get_opportunityGet a single opportunity by id.No findings

    Why it is in this group

    • The name "twenty_get_opportunity" says "get": a word for reading.
    Description, as the server wrote it
    Get a single opportunity by id. Twenty REST: GET /rest/opportunities/{id}.

    Annotations the server declares

    • title: Get opportunity
    • readOnlyHint: true
  • twenty_get_personGet a single person (contact) by id.No findings

    Why it is in this group

    • The name "twenty_get_person" says "get": a word for reading.
    Description, as the server wrote it
    Get a single person (contact) by id. Twenty REST: GET /rest/people/{id}.

    Annotations the server declares

    • title: Get person
    • readOnlyHint: true
  • twenty_get_taskGet a single task by id.No findings

    Why it is in this group

    • The name "twenty_get_task" says "get": a word for reading.
    Description, as the server wrote it
    Get a single task by id. Twenty REST: GET /rest/tasks/{id}.

    Annotations the server declares

    • title: Get task
    • readOnlyHint: true
  • twenty_list_companiesList/filter companies.No findings

    Why it is in this group

    • The name "twenty_list_companies" says "list": a word for reading.
    Description, as the server wrote it
    List/filter companies. Supports cursor pagination, raw filter/order_by, and relation depth. Twenty REST: GET /rest/companies.

    Annotations the server declares

    • title: List companies
    • readOnlyHint: true
  • twenty_list_metadata_objectsList all objects (standard + custom) and their fields from the Twenty schema — use this to discover custom objects/fields and valid field names.No findings

    Why it is in this group

    • The name "twenty_list_metadata_objects" says "list": a word for reading.
    Description, as the server wrote it
    List all objects (standard + custom) and their fields from the Twenty schema — use this to discover custom objects/fields and valid field names. Twenty REST: GET /rest/metadata/objects.

    Annotations the server declares

    • title: List metadata objects
    • readOnlyHint: true
  • twenty_list_notesList/filter notes.No findings

    Why it is in this group

    • The name "twenty_list_notes" says "list": a word for reading.
    Description, as the server wrote it
    List/filter notes. Supports cursor pagination, raw filter/order_by, and relation depth. Twenty REST: GET /rest/notes.

    Annotations the server declares

    • title: List notes
    • readOnlyHint: true
  • twenty_list_opportunitiesList/filter opportunities (deals).No findings

    Why it is in this group

    • The name "twenty_list_opportunities" says "list": a word for reading.
    Description, as the server wrote it
    List/filter opportunities (deals). Supports cursor pagination, raw filter/order_by, and relation depth. Twenty REST: GET /rest/opportunities.

    Annotations the server declares

    • title: List opportunities
    • readOnlyHint: true
  • twenty_list_peopleList/filter people (contacts).No findings

    Why it is in this group

    • The name "twenty_list_people" says "list": a word for reading.
    Description, as the server wrote it
    List/filter people (contacts). Supports cursor pagination, raw filter/order_by, and relation depth. Twenty REST: GET /rest/people.

    Annotations the server declares

    • title: List people
    • readOnlyHint: true
  • twenty_list_tasksList/filter tasks.No findings

    Why it is in this group

    • The name "twenty_list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List/filter tasks. Supports cursor pagination, raw filter/order_by, and relation depth. Twenty REST: GET /rest/tasks.

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http twenty https://twenty.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__twenty__twenty_list_metadata_objects",
      "mcp__twenty__twenty_list_people",
      "mcp__twenty__twenty_get_person",
      "mcp__twenty__twenty_list_companies",
      "mcp__twenty__twenty_get_company",
      "mcp__twenty__twenty_list_opportunities",
      "mcp__twenty__twenty_get_opportunity",
      "mcp__twenty__twenty_list_notes",
      "mcp__twenty__twenty_get_note",
      "mcp__twenty__twenty_list_tasks",
      "mcp__twenty__twenty_get_task"
    ],
    "ask": [],
    "deny": [
      "mcp__twenty__twenty_create_person",
      "mcp__twenty__twenty_update_person",
      "mcp__twenty__twenty_create_company",
      "mcp__twenty__twenty_update_company",
      "mcp__twenty__twenty_create_opportunity",
      "mcp__twenty__twenty_update_opportunity",
      "mcp__twenty__twenty_create_note",
      "mcp__twenty__twenty_create_task",
      "mcp__twenty__twenty_update_task"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as twenty. Review it before you use it.