Skills
Dale capacidades nuevas a un Met — actívalas del catálogo, guarda sus credenciales y vincúlalas.
Una skill es una capacidad empaquetada que un Met puede usar: hablar con un sistema externo, ejecutar un procedimiento, leer una fuente de datos. En vez de cablear cada integración a mano, activas la skill y el Met ya sabe usarla.
Usa los scopes skills:read y skills:manage.
El modelo en tres piezas
| pieza | qué es |
|---|---|
| Catálogo | las skills disponibles para tu workspace — las del sistema y las del marketplace |
| Activación | la skill instalada en tu workspace, con sus credenciales y su estado |
| Vínculo | qué Mets pueden usarla. Activarla no se la da a todos: se vincula por Met |
Esa tercera pieza es la que más se pasa por alto. Activar una skill no hace que tus Mets la usen — hay que vincularla. Es a propósito: así un Met de soporte no hereda las capacidades del de facturación.
Ver qué hay
const catalogo = await met.skills.marketplace(); // las del marketplace
const sistema = await met.skills.system(); // las que trae Meteor
const activas = await met.skills.active(); // las que ya tienes activas
const todas = await met.skills.all();
Para saber en qué estado está cada una:
const estados = await met.skills.status();
// → [{ skill_id, active, configured, missing_credentials: [...] }, …]
const una = await met.skills.skillStatus('crm-hubspot');
configured es la que importa antes de vincular: una skill puede estar activa y sin credenciales, y en ese caso el Met la ve y falla al usarla.
Activar y configurar
await met.skills.activate('crm-hubspot');
await met.skills.setCredentials('crm-hubspot', {
api_key: process.env.HUBSPOT_KEY,
});
Las credenciales son write-only: se guardan cifradas y ninguna respuesta de la API las devuelve, ni completas ni enmascaradas. Para saber si están puestas usas configured del estado; para cambiarlas, las vuelves a mandar enteras.
Antes de dárselas a un Met, pruébalas:
const prueba = await met.skills.test('crm-hubspot', { /* payload de ejemplo */ });
test ejecuta la skill de verdad contra el sistema externo, así que gasta lo que gaste esa llamada. Con una key met_test_ no puedes ejecutar skills que tengan efectos externos — ver Autenticación.
Vincularla a un Met
await met.skills.linkToAgent(agentId, 'crm-hubspot');
const delMet = await met.skills.forAgent(agentId); // qué ve ese Met
await met.skills.unlinkFromAgent(agentId, 'crm-hubspot');
Desvincular no desactiva la skill ni borra sus credenciales: solo se la quita a ese Met. Para sacarla del workspace:
await met.skills.deactivate('crm-hubspot'); // conserva credenciales
await met.skills.remove('crm-hubspot'); // la saca del workspace
Las ejecuciones en curso que ya estaban usando la skill terminan; las siguientes dejan de verla.
Skills con sus propios MCPs
Una skill puede traer servidores MCP propios, y puedes controlar cuáles quedan expuestos:
const servidores = await met.skills.mcps('crm-hubspot');
await met.skills.setMcps('crm-hubspot', { /* configuración */ });
await met.skills.updateMcp('crm-hubspot', mcpId, { /* cambios */ });
await met.skills.removeMcp('crm-hubspot', mcpId);
No confundir con Integraciones MCP, que son conectores que tú registras a nivel de workspace: los de aquí vienen dentro de la skill y viven y mueren con ella.
Cuándo una skill y cuándo una tool suelta
- Skill — si la capacidad tiene credenciales, varias operaciones y quieres
prenderla o apagarla como una unidad.
- Integración MCP — si ya tienes un servidor MCP y
solo quieres que Meteor lo use.
- Función — si es tu propio código y quieres que el
Met lo llame como un endpoint.
El orden que casi siempre quieres:
status→activate→setCredentials→test→linkToAgent. Saltarsetestes la causa más común de un Met que "tiene la skill" y falla al primer uso.