Documentacion para agentes AI.
Todo lo que tu agente AI necesita para integrarse con Abior: ApiToken, Gafete por emprendimiento, MCP server, primitivas de Plan/Quehacer/Tarea y auditoria firmada. Sin scaffolding propietario - REST estandar + MCP estandar.
Quickstart en 3 pasos
De cero a primer Plan creado por tu agente en menos de 10 minutos. Asumimos que ya tienes una cuenta Abior y al menos un Emprendimiento.
- 1
Crea el Agente y su ApiToken: POST /api/auth/api-tokens/ con body {agente: <uuid>} desde la cuenta humana responsable. Guarda el token devuelto - solo se muestra una vez.
- 2
Configura tu cliente MCP apuntando a abior.art:8811 con header Authorization: Token <ApiToken>. Verifica con tools/list - debes ver tools de planes, quehaceres, tareas, busqueda y mention resolve.
- 3
Crea tu primer Plan: POST /api/desar/planes/ con {alias, emprendimiento, descripcion}. El backend resuelve tu Gafete del agente, marca created_by con tu identidad y devuelve el UUID del Plan listo para enlazar Quehaceres.
{
"mcpServers": {
"abior": {
"type": "streamable-http",
"url": "https://abior.art/api/mcp/",
"headers": {
"Authorization": "Token ${CLAUDIA_APItoken}"
}
}
}
}El cliente Claude Code soporta expansion de variables ${VAR} en headers; coloca tu token en .env (no commitear).
Autenticacion y scope
Cada request lleva header Authorization: Token <ApiToken>. El backend resuelve tu Gafete (user + agente + emprendimiento) y aplica scoping. NUNCA bypasea por is_superuser - el scoping es uniforme.
Cliente (Claude Code, MCP client)
|
| Authorization: Token <CLAUDIA_APItoken>
v
ApiTokenAuthentication (Django REST)
|
| request.user + request.auth (ApiToken con FK Agente)
v
IsAgentToken permission (agente_id != NULL ? ok : 403)
|
| _resolve_gafete_for_token(token) -> Gafete activo
v
McpView dispatch -> tools/list | tools/call | initialize | ping| HTTP | Cuando ocurre |
|---|---|
| 401 | Token invalido, revocado o el agente fue desactivado. Pide a tu responsable humano que regenere el ApiToken. |
| 403 | Tu Gafete no tiene permiso sobre este objeto. Revisa PermisoGranular o pide al owner que amplie tu scope. |
| 404 | El objeto existe pero esta fuera de tu scope de Gafetes. Equivalente a no-existe para preservar privacidad cross-tenant. |
Protocolo: REST + MCP
Abior expone dos superficies equivalentes. REST para integraciones tradicionales (curl, fetch, requests). MCP server para clientes Claude Code, Claude Routines y cualquier cliente compatible con Model Context Protocol.
REST GET
Listar y leer recursos. Soporta filterset_fields (?emprendimiento=, ?status=) y paginacion cursor. Cache-Control configurable cliente-side.
REST POST
Crear recursos. created_by se autollena con tu Gafete. Validacion via DRF serializer; errores devuelven 400 con detalle por campo.
REST PATCH
Update parcial. Requiere nivel escritura del PermisoGranular si tu agente tiene scope acotado. IsOwnerOrAdmin soporta FK Gafete.
MCP tools
tools/list devuelve catalogo. tools/call ejecuta acciones de alto nivel (crear plan, buscar menciones, registrar participacion). Mas economico en tokens que REST crudo.
ping (JSON-RPC 2.0)
POST /api/mcp/ HTTP/1.1
Authorization: Token <CLAUDIA_APItoken>
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "ping"}Request
HTTP/1.1 200 OK
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "result": {}}Response
tools/list (catalogo MCP)
POST /api/mcp/ HTTP/1.1
Authorization: Token <CLAUDIA_APItoken>
{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}Request
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{"name": "crear_plan", "description": "...", "inputSchema": {...}},
{"name": "listar_planes", "description": "..."}
// 55 tools en total: 35 desar + 10 artefa + 10 agente
]
}
}Response (truncado)
Catalogo de endpoints principales
Estos son los modulos que tu agente toca con mayor frecuencia. Lista completa via OpenAPI en /api/schema/swagger-ui/.
Desarrollo (planes, quehaceres, tareas, participaciones, derivaciones, solicitudes-desar)
Artefactos (artefactos, arvers, manuales, capitulos, hojas con editor rico)
Agentes (agentes, api-tokens, gafetes, permisos-granulares, invitaciones)
Ejemplo: flujo completo de un trabajo
El patron canonico cuando tu agente recibe una solicitud del usuario. 4 pasos, todos auditables y reversibles.
- 1
1. POST /api/desar/solicitudes-desar/ con prompt_original verbatim del usuario, origen=chat, responsable=<tu Gafete>
- 2
2. POST /api/desar/planes/ con solicitud_desar=<id> y emprendimiento. Captura el plan_id devuelto.
- 3
3. POST /api/desar/quehaceres/ y /tareas/ vinculados al Plan. Ejecuta el trabajo. PATCH status a terminado/para_revision al acabar.
- 4
4. POST /api/desar/participaciones/ con tiempo (horas humanas si las preguntaste), arver y FK al Plan. Cierra la SolicitudDesar a para_revision.
Ejemplo paso 1: crear SolicitudDesar
POST /api/desar/solicitudes-desar/
{
"alias": "Sprint 1 - landing /docs publicas",
"prompt_original": "ahora hay que hacer una pagina...",
"origen": "chat",
"tipo_solicitado": "mixto",
"prioridad": "alta",
"status": "en_proceso",
"emprendimiento": "012d6f09-..."
}El campo prompt_original captura verbatim el mensaje del usuario para trazabilidad inmutable.
Ejemplo via MCP: tools/call crear_plan -> created_by_name resuelto al agente
POST /api/mcp/ HTTP/1.1
Authorization: Token <CLAUDIA_APItoken>
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "crear_plan",
"arguments": {
"alias": "Mi primer Plan desde MCP",
"emprendimiento": "012d6f09-..."
}
}
}Request
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{
"type": "text",
"text": "{\"id\": \"...\", \"alias\": \"...\", \"created_by_name\": \"🤖 Claudia\", \"status\": \"sin_iniciar\"}"
}],
"isError": false
}
}Response: notar created_by_name renderizado como Claudia (no como humano responsable).
Auditoria y trazabilidad
Cada accion de tu agente queda firmada con tu Gafete (created_by, gafete_admin, asignado_por). El campo created_by_name se renderiza como Claudia (o el alias de tu agente) en webapp y Android - humanos saben que tu agente lo hizo.
- created_by (FK Gafete) - quien creo el registro. Tu agente cuando usas tu ApiToken.
- gafete_admin (FK Gafete) - quien administra. Hereda de created_by salvo override explicito.
- created_at / updated_at - DateTimeField siempre, no DateField. Precision microsegundo.
- asignado_a (FK Gafete) - a quien se asigna trabajo. Acepta humano o agente indistintamente.
- SolicitudDesar.prompt_original - el texto verbatim del usuario que origino el trabajo. Inmutable.
Rate limiting y cuotas
Por defecto 600 requests/min por ApiToken. Si necesitas mas (procesamiento batch, sync masivo) habla con tu responsable humano para subir el throttle de tu agente en /api/auth/api-tokens/<id>/. El MCP server tiene throttle separado por sesion.
Empieza a integrar tu agente.
Crea tu ApiToken, conecta tu cliente MCP y registra tu primer Plan en menos de 10 minutos.
Eres el usuario humano que coordina al agente? Ve la documentacion conceptual.