# Vanisur Platform > A live demo of Vanisur Platform: identity, scoped permissions, spending caps and an append-only audit trail for an AI agent. No account, no install, no repository — just the six calls below. The company is made up and so is its data. The demo wipes itself and re-seeds every 24 hours, so anything you do here is gone by tomorrow. Never put real data in it. Spanish version: https://platform.demo.vanisur.com/conectar · English: https://platform.demo.vanisur.com/connect ## Connect an agent (six calls) 1. Get the demo owner credential. The demo hands it out: it is the owner of a fictional company. Save it as DUENO. curl -s https://platform.demo.vanisur.com/api/v1/demo 2. Register your agent. It is born unable to do anything: no permissions. The token is shown once — save it as AGENTE_TOKEN, and the id as AGENTE. curl -s -X POST https://platform.demo.vanisur.com/api/v1/agentes \ -H "authorization: Bearer $DUENO" \ -H "content-type: application/json" \ -d '{"nombre":"Agente de un desconocido {azar}"}' 3. Grant one permission. Denied by default: without this row, the action is refused. pedidos.consultar only reads, so it needs no caps. curl -s -X POST https://platform.demo.vanisur.com/api/v1/agentes/$AGENTE/permisos \ -H "authorization: Bearer $DUENO" \ -H "content-type: application/json" \ -d '{"accion":"pedidos.consultar"}' 4. Ask the agent who it is. Over MCP (Streamable HTTP), with the agent token. It answers its identity and what it is allowed to do today. curl -s -X POST https://platform.demo.vanisur.com/api/mcp \ -H "authorization: Bearer $AGENTE_TOKEN" \ -H "content-type: application/json" \ -H "accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"yo","arguments":{}}}' 5. Grab an order to ask about. The action needs an order id, and the owner is the one who has them. Save the first one as PEDIDO. curl -s https://platform.demo.vanisur.com/api/v1/practica/pedidos \ -H "authorization: Bearer $DUENO" 6. Run the action. The same call with the tool name. Everything the agent does lands in the audit trail, which can only be appended to. curl -s -X POST https://platform.demo.vanisur.com/api/mcp \ -H "authorization: Bearer $AGENTE_TOKEN" \ -H "content-type: application/json" \ -H "accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"pedidos_consultar","arguments":{"pedido_id":"'$PEDIDO'"}}}' ## MCP client Claude Desktop and Claude Code reach an HTTP server through mcp-remote; Cursor and VS Code can send the header themselves. Our endpoint takes a bearer token and has no OAuth: the agent credential is the whole authentication. Claude Desktop / Claude Code: ```json { "mcpServers": { "vanisur-platform": { "command": "npx", "args": [ "-y", "mcp-remote", "https://platform.demo.vanisur.com/api/mcp", "--header", "Authorization:Bearer ${TOKEN_AGENTE}" ], "env": { "TOKEN_AGENTE": "vp_agente_…" } } } } ``` Clients that send their own headers (Cursor, VS Code): ```json { "mcpServers": { "vanisur-platform": { "url": "https://platform.demo.vanisur.com/api/mcp", "headers": { "Authorization": "Bearer vp_agente_…" } } } } ``` ## What this is not - Not a production system with real data: the company is fictional and the demo re-seeds every 24 hours. - Not an app generator. Platform is the rail an agent runs on: identity, permissions, caps, audit. - No OAuth on the MCP endpoint: the agent credential is a bearer token. ## Machine-readable plan The steps above, for a program to follow. `{llaves}` are replaced with what earlier steps produced. ```json { "base": "https://platform.demo.vanisur.com", "empresa": "ficticia", "reinicio_horas": 24, "pasos": [ { "id": "credencial", "metodo": "GET", "ruta": "/api/v1/demo", "saca": { "dueno": "credencial_dueno" } }, { "id": "agente", "metodo": "POST", "ruta": "/api/v1/agentes", "cuerpo": { "nombre": "Agente de un desconocido {azar}" }, "saca": { "agente_id": "agente.id", "agente_token": "credencial.token" } }, { "id": "permiso", "metodo": "POST", "ruta": "/api/v1/agentes/{agente_id}/permisos", "cuerpo": { "accion": "pedidos.consultar" } }, { "id": "pedido", "metodo": "GET", "ruta": "/api/v1/practica/pedidos", "saca": { "pedido_id": "pedidos.0.id" } } ], "reemplazos": { "azar": "cualquier cosa única y corta (la hora, seis caracteres al azar): el nombre de un agente no se puede repetir en la empresa" }, "mcp": { "ruta": "/api/mcp", "cabecera": "Authorization: Bearer {agente_token}", "herramientas": [ { "nombre": "yo", "argumentos": {} }, { "nombre": "pedidos_consultar", "argumentos": { "pedido_id": "{pedido_id}" } } ] } } ```