Herramientas
| Tool | Endpoint REST | Anotaciones |
|---|---|---|
list_workspace_tools | GET /v1/tools | lectura, idempotente |
get_workspace_tool | GET /v1/tools/{toolId} | lectura, idempotente |
list_agent_tools | GET /v1/agents/{agentId}/tools | lectura, idempotente |
list_available_agent_tools | GET /v1/agents/{agentId}/tools/available | lectura, idempotente |
connect_agent_tool | POST /v1/agents/{agentId}/tools | escritura |
update_agent_tool_status | PATCH /v1/agents/{agentId}/tools/{toolId} | escritura, idempotente |
disconnect_agent_tool | DELETE /v1/agents/{agentId}/tools/{toolId} | destructiva |
preview_mcp_server | POST /v1/tools/mcp/preview | lectura (no persiste) |
list_mcp_servers | GET /v1/tools/mcp | lectura, idempotente |
get_mcp_server | GET /v1/tools/mcp/{mcpId} | lectura, idempotente |
connect_mcp_server | POST /v1/tools/mcp | escritura |
refresh_mcp_server | POST /v1/tools/mcp/{mcpId}/refresh | escritura, idempotente |
start_mcp_server_oauth | POST /v1/tools/mcp/{mcpId}/oauth/start | escritura |
sync_mcp_server_tools | POST /v1/tools/mcp/{mcpId}/tools/sync | destructiva (reemplaza) |
delete_mcp_server | DELETE /v1/tools/mcp/{mcpId} | destructiva |
list_api_tools | GET /v1/tools/apis | lectura, idempotente |
get_api_tool | GET /v1/tools/apis/{integrationId} | lectura, idempotente |
create_api_tool | POST /v1/tools/apis | escritura |
update_api_tool | PATCH /v1/tools/apis/{integrationId} | escritura, parcial |
test_api_tool | POST /v1/tools/apis/{integrationId}/test | destructiva (puede ejecutar POST/PATCH/DELETE) |
enable_api_tool | POST /v1/tools/apis/{integrationId}/enable | escritura, idempotente |
pause_api_tool | POST /v1/tools/apis/{integrationId}/pause | destructiva, idempotente |
delete_api_tool | DELETE /v1/tools/apis/{integrationId} | destructiva |
Las tres capas
Antes de usar estos tools conviene tener clara la separación, porque es la fuente de casi todos los errores:
- El catálogo del workspace — todo lo que existe y se puede usar.
list_workspace_tools. - La conexión con un agente — lo que hace que un agente concreto pueda llamar una herramienta.
connect_agent_tool. - Los conectores — lo que crea entradas en el catálogo.
connect_mcp_serverycreate_api_tool.
Instalar una herramienta en el workspace no se la da a ningún agente. Desconectarla de un agente no la borra del workspace.
connect_mcp_server → el servidor y sus herramientas quedan en el catálogo
list_workspace_tools → obtienes los toolId
connect_agent_tool → el agente ya puede llamarlas Documentación REST completa en Herramientas .
Catálogo del workspace
list_workspace_tools
| Campo | Tipo | Descripción |
|---|---|---|
kind | "mcp" \| "api" \| "integration" \| "legacy" | Filtrar por origen. |
mcpId | string | Sólo herramientas de ese servidor MCP. |
integrationId | string | Sólo herramientas de esa API personalizada. |
workspace | string | si multi-ws |
Devuelve id (el toolId), name, description, kind, parameters y el origen de cada herramienta.
get_workspace_tool
| Campo | Tipo | Requerido |
|---|---|---|
toolId | string | sí |
workspace | string | si multi-ws |
Igual que un elemento de la lista, con el JSON Schema completo de los parámetros.
Herramientas de un agente
list_agent_tools
| Campo | Tipo | Requerido |
|---|---|---|
agentId | string | sí |
workspace | string | si multi-ws |
Sólo las conexiones con status: "active" se le pasan al modelo en tiempo de ejecución. Una entrada con toolExists: false es una conexión huérfana: la herramienta del catálogo fue eliminada.
list_available_agent_tools
| Campo | Tipo | Requerido |
|---|---|---|
agentId | string | sí |
kind | "mcp" \| "api" \| "integration" \| "legacy" | no |
workspace | string | si multi-ws |
Devuelve el catálogo completo con isConnected y connectionStatus. Úsalo antes de conectar para no chocar con un 409.
connect_agent_tool
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
agentId | string | sí | |
toolId | string | sí | Del catálogo, no el nombre de la herramienta. |
status | "active" \| "inactive" | no | Default "active". |
workspace | string | si multi-ws |
Devuelve 409 si ya estaba conectada — en ese caso usa update_agent_tool_status.
update_agent_tool_status
| Campo | Tipo | Requerido |
|---|---|---|
agentId | string | sí |
toolId | string | sí |
status | "active" \| "inactive" | sí |
workspace | string | si multi-ws |
Desactivar es la forma reversible de quitarle una herramienta al agente. Activar una que no estaba conectada la conecta, así que el tool es idempotente.
disconnect_agent_tool
| Campo | Tipo | Requerido |
|---|---|---|
agentId | string | sí |
toolId | string | sí |
workspace | string | si multi-ws |
Elimina la conexión. No borra la herramienta del catálogo ni afecta a otros agentes.
Servidores MCP
preview_mcp_server
Se conecta al servidor y lista sus herramientas sin guardar nada. Llámalo antes de connect_mcp_server.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
url | string | sí | URL del servidor (https). |
auth | objeto | no | Default { "type": "none" }. |
headers | objeto | no | Headers extra para el handshake. |
workspace | string | si multi-ws |
Formas de auth:
type | Campos |
|---|---|
none | — |
bearer | token |
apikey-header | token, headerName, headerPrefix (opcional) |
oauth2 | scope, clientId, clientSecret (todos opcionales) |
Los name que devuelve son los nombres originales del servidor: son los que se pasan como tools a connect_mcp_server y sync_mcp_server_tools.
list_mcp_servers
| Campo | Tipo | Requerido |
|---|---|---|
workspace | string | si multi-ws |
status puede ser connected, pending_auth, needs_reauth o error. Las credenciales nunca se devuelven.
get_mcp_server
| Campo | Tipo | Requerido |
|---|---|---|
mcpId | string | sí |
workspace | string | si multi-ws |
Incluye discoveredTools (lo que ofrece el servidor, con un flag installed) e installedTools (lo que está en el catálogo, con su toolId).
connect_mcp_server
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string (≤ 120) | sí | Nombre visible dentro de Platica. |
url | string | sí | URL del servidor (https). |
description | string (≤ 500) | no | |
auth | objeto | no | Igual que en preview_mcp_server. |
headers | objeto | no | |
tools | string[] | no | Nombres originales a instalar. Omitir instala todas. |
workspace | string | si multi-ws |
{
"name": "connect_mcp_server",
"arguments": {
"name": "Linear",
"url": "https://mcp.linear.app/mcp",
"auth": { "type": "bearer", "token": "lin_api_xxx" },
"tools": ["create_issue", "search_issues"]
}
} Devuelve installedToolIds, que son los toolId listos para connect_agent_tool.
Con auth.type: "oauth2" la respuesta incluye authorizeUrl. Abre esa URL en un navegador y después llama a refresh_mcp_server. Si necesitas reiniciar la autorización, usa start_mcp_server_oauth.
refresh_mcp_server
| Campo | Tipo | Requerido |
|---|---|---|
mcpId | string | sí |
workspace | string | si multi-ws |
Vuelve a descubrir herramientas y actualiza los esquemas de las instaladas. No instala las nuevas: aparecen con installed: false hasta que las agregues con sync_mcp_server_tools.
start_mcp_server_oauth
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
mcpId | string | sí | |
scope | string | no | Scopes OAuth solicitados. |
clientId, clientSecret | string | no | Sólo para proveedores sin registro dinámico. |
workspace | string | si multi-ws |
Devuelve authorizeUrl; una persona debe abrirla en el navegador. El callback guarda los tokens cifrados.
sync_mcp_server_tools
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
mcpId | string | sí | |
tools | string[] | sí | Lista completa de nombres originales que deben quedar instalados. |
workspace | string | si multi-ws |
Es un reemplazo, no un agregado. Las herramientas que no estén en la lista se eliminan del catálogo y se desconectan de todos los agentes. Para agregar una sin perder las demás, lee primero get_mcp_server y manda la lista actual más la nueva.
delete_mcp_server
| Campo | Tipo | Requerido |
|---|---|---|
mcpId | string | sí |
workspace | string | si multi-ws |
Elimina el servidor, sus credenciales, sus herramientas y las conexiones que tuvieran con cualquier agente.
APIs personalizadas
Una API personalizada convierte un endpoint HTTP en una herramienta. Tiene dos partes: request describe la llamada con marcadores {{nombre}}, y variables declara quién rellena cada uno.
mode de la variable | Quién aporta el valor | ¿La ve el modelo? |
|---|---|---|
ai (default) | El modelo al llamar la herramienta | Sí |
constant | constantValue | No |
context | contextField de la conversación | No |
El esquema que ve el modelo se deriva de las variables ai al habilitarla. Por eso la description de cada variable es obligatoria: es lo que el modelo lee.
Ciclo de vida: draft → enabled → paused. Sólo en enabled existe en el catálogo.
list_api_tools
| Campo | Tipo | Requerido |
|---|---|---|
workspace | string | si multi-ws |
get_api_tool
| Campo | Tipo | Requerido |
|---|---|---|
integrationId | string | sí |
workspace | string | si multi-ws |
Las credenciales y constantes write-only se devuelven como "[REDACTED]"; nunca entran al contexto del modelo.
create_api_tool
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | sí | Minúsculas, empieza alfanumérico, sólo letras/dígitos/_ (≤ 62). El modelo la verá como api_<name>. |
description | string (10-1024) | sí | Cuándo debe llamarla el agente. |
request | objeto | sí | method, url, params, headers, body, auth. |
variables | array | no | name, type, description, required, mode, y refinamientos JSON Schema. |
passContext | boolean | no | Necesario para variables en modo context. |
context | objeto | no | Configuración de contexto, como lastMessagesN. |
mapping | objeto | no | bodyStrategy y extraBody. |
response | objeto | no | path, include, exclude, maxBytes para recortar la respuesta. |
periodicAuth | objeto | no | Token generado por cron e inyectado en header/query. |
encryptPayload | objeto | no | Firma el body como JWT. |
workspace | string | si multi-ws |
{
"name": "create_api_tool",
"arguments": {
"name": "order_lookup",
"description": "Consulta el estado de un pedido por su folio. Úsala cuando el cliente pregunte dónde va su pedido.",
"request": {
"method": "GET",
"url": "https://api.tienda.com/orders/{{orderId}}",
"auth": { "type": "bearer", "token": "sk_live_xxx" }
},
"variables": [
{
"name": "orderId",
"type": "string",
"description": "Folio del pedido, tal como aparece en el correo de confirmación.",
"required": true
}
]
}
} Nace como borrador. Pruébala con test_api_tool y publícala con enable_api_tool.
update_api_tool
Mismos campos que create_api_tool pero todos opcionales, más integrationId. Los arrays (variables, request.headers, request.params) se reemplazan completos, no se fusionan elemento por elemento.
test_api_tool
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
integrationId | string | sí | |
input | objeto | no | Valores para las variables en modo ai. |
dryRun | boolean | no | true arma la petición sin llamar a la API. |
workspace | string | si multi-ws |
Empieza con dryRun: true para verificar las sustituciones antes de golpear la API real. Un fallo de la API remota no es un error del tool: se reporta en data.outcome y data.httpStatus.
enable_api_tool
| Campo | Tipo | Requerido |
|---|---|---|
integrationId | string | sí |
workspace | string | si multi-ws |
Publica la herramienta en el catálogo y devuelve el toolId para connect_agent_tool. Falla con 400 si alguna variable visible para el modelo no tiene descripción.
pause_api_tool
| Campo | Tipo | Requerido |
|---|---|---|
integrationId | string | sí |
workspace | string | si multi-ws |
Retira la herramienta del catálogo conservando su configuración.
delete_api_tool
| Campo | Tipo | Requerido |
|---|---|---|
integrationId | string | sí |
workspace | string | si multi-ws |
Elimina la herramienta definitivamente. Si sólo quieres apagarla, usa pause_api_tool.
Endpoints REST sin tool MCP
- Instalar apps de primera parte (
kind: "integration") se hace desde el panel. Una vez instaladas, sus herramientas aparecen enlist_workspace_toolsy se conectan igual que cualquier otra.