Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
138 lines
6.9 KiB
Plaintext
138 lines
6.9 KiB
Plaintext
---
|
|
title: Servidor MCP
|
|
description: Conecta asistentes de IA a tu espacio de trabajo de Twenty mediante el Model Context Protocol.
|
|
---
|
|
|
|
Twenty expone un servidor [MCP](https://modelcontextprotocol.io/) para que los asistentes de IA — Claude Desktop, Claude Code, Cursor, ChatGPT y otros — puedan leer y escribir tus datos de CRM mediante lenguaje natural.
|
|
|
|
Usa tu **URL del espacio de trabajo** (la URL que utilizas para acceder a Twenty) como el punto de acceso MCP. En Twenty Cloud, la URL de tu espacio de trabajo puede ser `https://{mycompany}.twenty.com` o un dominio personalizado. El servidor está disponible en:
|
|
|
|
| Entorno | Punto de acceso MCP |
|
|
| ------------------- | ------------------------------------------------------------------------------- |
|
|
| **Nube** | `https://{your-workspace-url}/mcp` (p. ej., `https://mycompany.twenty.com/mcp`) |
|
|
| **Autoalojamiento** | `https://{your-domain}/mcp` |
|
|
|
|
## Métodos de autenticación
|
|
|
|
Tienes dos formas de autenticar tu cliente MCP: **OAuth** (recomendado) o **API Key**.
|
|
|
|
### Opción A — OAuth (recomendado)
|
|
|
|
Con OAuth, tu cliente MCP abre una ventana del navegador para que inicies sesión. No se guardan secretos en archivos de configuración y los tokens se actualizan automáticamente.
|
|
|
|
<Note>
|
|
OAuth requiere un cliente MCP que sea compatible con la [especificación de autorización de MCP](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization). Claude Desktop, Claude Code, Cursor y ChatGPT lo admiten.
|
|
</Note>
|
|
|
|
Agrega esto a la configuración de tu cliente MCP, reemplazando `{your-workspace-url}` por el host de tu espacio de trabajo (p. ej., `mycompany.twenty.com`):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"twenty": {
|
|
"type": "streamable-http",
|
|
"url": "https://{your-workspace-url}/mcp"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Eso es todo: no se necesita clave de API. Cuando el cliente se conecte por primera vez, hará lo siguiente:
|
|
|
|
1. Descubrir los metadatos de OAuth de Twenty a través de `/.well-known/oauth-protected-resource` y `/.well-known/oauth-authorization-server`
|
|
2. Registrarse como cliente OAuth mediante registro dinámico de clientes (RFC 7591)
|
|
3. Abrir tu navegador para autorizar el acceso
|
|
4. Recibir tokens y conectarse al servidor MCP
|
|
|
|
Las conexiones posteriores reutilizan los tokens almacenados y los actualizan automáticamente.
|
|
|
|
### Opción B — API Key
|
|
|
|
Si tu cliente MCP no es compatible con OAuth o prefieres credenciales estáticas, pasa una clave de API en el encabezado `Authorization`:
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"twenty": {
|
|
"type": "streamable-http",
|
|
"url": "https://{your-workspace-url}/mcp",
|
|
"headers": {
|
|
"Authorization": "Bearer YOUR_API_KEY"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
<Warning>
|
|
Tu clave de API concede acceso a los datos del espacio de trabajo. Manténla fuera del control de versiones y de dotfiles compartidos.
|
|
</Warning>
|
|
|
|
Para crear una clave de API, ve a **Settings → MCP & APIs → API → + Create key**. Consulta [APIs](/l/es/developers/extend/api#create-an-api-key) para más detalles.
|
|
|
|
## Inicio rápido
|
|
|
|
### 1. Copia la configuración
|
|
|
|
Ve a **Settings → MCP & APIs → MCP** en Twenty. Elige tu método de autenticación (OAuth o API Key), copia el fragmento JSON (ya usará la URL de tu espacio de trabajo) y pégalo en el archivo de configuración de tu cliente MCP.
|
|
|
|
| Cliente | Ubicación del archivo de configuración |
|
|
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| **Claude Desktop** | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o `%APPDATA%\Claude\claude_desktop_config.json` (Windows) |
|
|
| **Claude Code** | `~/.claude.json` (usuario) o `.mcp.json` (proyecto) |
|
|
| **Cursor** | `.cursor/mcp.json` en tu proyecto, o `~/.cursor/mcp.json` de forma global |
|
|
| **ChatGPT** | Activa Developer Mode en **Settings → Apps & Connectors → Advanced settings**, luego usa **Create** en **Settings → Apps & Connectors** para añadir el servidor MCP |
|
|
|
|
### 2. Conectar
|
|
|
|
Reinicia tu cliente MCP (o recarga la configuración). Si usas OAuth, se te redirigirá a Twenty para autorizar el acceso. Si usas una clave de API, la conexión es inmediata.
|
|
|
|
### 3. Empieza a usarlo
|
|
|
|
Pídele a tu asistente de IA que interactúe con tu CRM:
|
|
|
|
* *"Muéstrame las 5 empresas creadas más recientemente"*
|
|
* *"Crea una nueva persona llamada Jane Doe en Acme Corp"*
|
|
* *"Encuentra todas las oportunidades abiertas con un valor superior a $10k"*
|
|
|
|
## Herramientas disponibles
|
|
|
|
Una vez conectado, el servidor MCP expone herramientas que reflejan la API de Twenty. El flujo de trabajo recomendado es:
|
|
|
|
1. **`learn_tools`** — obtener el esquema de entrada para herramientas específicas
|
|
2. **`execute_tool`** — ejecutar una herramienta
|
|
|
|
No necesitas recordar los nombres de las herramientas. Pregúntale a tu asistente de IA qué puede hacer y llamará a `learn_tools` automáticamente.
|
|
|
|
## Permisos
|
|
|
|
Las conexiones MCP heredan los permisos del usuario autenticado (OAuth) o del rol asignado a la clave de API. Para restringir lo que puede hacer el servidor MCP:
|
|
|
|
* **OAuth**: Se aplica el rol del espacio de trabajo del usuario.
|
|
* **API Key**: Asigna un rol a la clave de API en **Settings → Members → Roles**. Consulta [Permisos](/l/es/user-guide/permissions-access/capabilities/permissions).
|
|
|
|
## Configuración autohospedada
|
|
|
|
Para instancias autohospedadas, reemplaza `{your-workspace-url}` por la URL de tu servidor. Asegúrate de que `SERVER_URL` en tu entorno coincida con la URL pública de tu instancia de Twenty — se utiliza para generar los metadatos de descubrimiento de OAuth.
|
|
|
|
```bash
|
|
SERVER_URL=https://twenty.yourcompany.com
|
|
```
|
|
|
|
El punto de acceso MCP, los puntos de acceso de OAuth y los metadatos de descubrimiento se derivan de este valor.
|
|
|
|
## Solución de Problemas
|
|
|
|
**Errores "Unauthorized" o 401**
|
|
|
|
* OAuth: vuelve a autorizar limpiando los tokens almacenados en tu cliente MCP y reconectando.
|
|
* API Key: verifica que la clave sea válida y no haya caducado. Vuelve a generarla si es necesario.
|
|
|
|
**El flujo de OAuth no abre un navegador**
|
|
|
|
* Asegúrate de que tu cliente MCP sea compatible con MCP Authorization. Si no lo es, recurre al método de clave de API.
|
|
|
|
**Tiempo de espera de la conexión**
|
|
|
|
* Confirma que la URL del punto de acceso MCP sea accesible desde tu equipo. Para instancias autohospedadas, comprueba que el servidor esté en ejecución y que `SERVER_URL` esté configurado correctamente.
|