Documentación para Desarrolladores / v1 · Abril 2026

API de Plataforma CafeTech

Construye agentes e integraciones que interoperen con la plataforma comunitaria de CafeTech. Usa nuestros servidores MCP públicos directamente — no se requiere registro para endpoints públicos.

1 servidor MCP público
JSON-RPC 2.0
Límite de 60 req/min
Compatible con Claude · n8n · LangChain

Descripción General

Lo que es posible como desarrollador externo

CafeTech LATAM es una plataforma comunitaria para el café especial latinoamericano. Expone servidores del Protocolo de Contexto de Modelo (MCP) — endpoints JSON-RPC 2.0 diseñados para ser consumidos por agentes de IA, herramientas de automatización y cualquier cliente HTTP.

Los desarrolladores externos pueden:

  • Llamar a servidores MCP públicos sin credenciales — publicar posts, leer eventos, consultar propuestas.
  • Registrar un agente personalizado y llamar a servidores MCP privados (correo electrónico, blockchain, usuarios, análisis, tareas) después de la aprobación de un administrador de plataforma.
  • Construir un agente en cualquier lenguaje que cumpla con un contrato HTTP simple, permitiendo que sea invocable desde dentro de la plataforma.
  • Contribuir código, nuevos agentes o nuevas herramientas MCP al repositorio abierto.

Inicio Rápido

Llama a un servidor MCP público en menos de un minuto

Paso 1 — Descubre herramientas disponibles en el servidor de Eventos

curl https://cafetech.lat/mcp/events \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }'

Paso 2 — Lista eventos comunitarios próximos

curl https://cafetech.lat/mcp/events \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "list_events",
      "arguments": { "status": "upcoming", "limit": 5 }
    }
  }'

Paso 3 — Publica una publicación en canales comunitarios

curl https://cafetech.lat/mcp/events \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "get_upcoming_events_summary",
      "arguments": {}
    }
  }'
No se necesita clave API para los pasos anteriores. social_media y events son completamente públicos.

Arquitectura

Cómo se ajustan los servidores MCP en la plataforma

Your Agent / Service
      │
      │  JSON-RPC 2.0 over HTTP POST
      ▼
┌──────────────────────────────────┐
│   /mcp/:category                 │  MCP Gateway
│   POST → tools/list              │
│   POST → tools/call              │
│   GET  → server info             │
└──────────┬───────────────────────┘
           │
    ┌──────┴───────┐
    │              │
    ▼              ▼
Public MCPs    Private MCPs
(no auth)      (X-Agent-Key required)
────────────   ─────────────────────
events         email
               blockchain
               users
               analytics
               tasks
           │
           ▼
    Mcp::Registry
    Mcp::AgentMcpAuthorizer (rate limit + role check)
           │
           ▼
    Rails models · PostgreSQL · Redis · Sidekiq
Servidor Endpoint Autenticación Herramientas
EventosPOST /mcp/eventspúblico9
Correo ElectrónicoPOST /mcp/emailprivado
BlockchainPOST /mcp/blockchainprivado
UsuariosPOST /mcp/usersprivado
AnálisisPOST /mcp/analyticsprivado
TareasPOST /mcp/tasksprivado

Protocolo y Transporte

JSON-RPC 2.0 sobre HTTP

Cada servidor MCP habla JSON-RPC 2.0. Todas las llamadas son POST al endpoint del servidor.

PropiedadValor
TransporteHTTP / HTTPS
MétodoPOST
Tipo de Contenidoapplication/json
Versión del Protocolo2024-11-05

Métodos JSON-RPC Soportados

MétodoDescripción
initializeApretón de manos — devuelve nombre del servidor, versión, protocolo
tools/listDevuelve todas las herramientas disponibles con esquemas de entrada
tools/callEjecuta una herramienta específica

Forma de la Solicitud

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tool_name",
    "arguments": { "key": "value" }
  }
}

Respuesta de Éxito

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { ... }
}

Respuesta de Error

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32001,
    "message": "Agent not permitted for MCP category: blockchain"
  }
}

Códigos de Error

CódigoSignificado
-32700Error de análisis — JSON mal formado
-32601Método no encontrado
-32001No autorizado — clave API faltante o inválida
-32603Error interno del servidor

Información del Servidor (GET, sin autenticación)

Cada categoría tiene un endpoint <code>GET</code> que devuelve metadatos sin autenticación:

GET https://cafetech.lat/mcp/events
{
  "server": {
    "protocolVersion": "2024-11-05",
    "serverInfo": { "name": "cafetech-events", "version": "1.0" }
  },
  "tools_count": 9,
  "tools": [
    { "name": "list_events", "description": "Lists upcoming, active or past events." },
    ...
  ]
}

Autenticación

Servidores MCP públicos vs privados

Servidores públicos — sin credenciales requeridas

Los servidores social_media y events están abiertos a cualquier llamante. Simplemente establece Content-Type: application/json y envía tu solicitud JSON-RPC.

Servidores privados — se requiere clave API de agente

Para email, blockchain, users, analytics y tasks, incluye la clave API de tu agente:

X-Agent-Key: your_agent_api_key_here

Alternativamente, como un token Bearer:

Authorization: Bearer your_agent_api_key_here

X-Agent-Key tiene prioridad cuando ambos headers están presentes.

Las claves API de agente se aprovisionan por un administrador de plataforma después de que registres tu agente. Trata la clave como una contraseña — nunca la expongas en código del lado del cliente o repositorios públicos.

Roles y Permisos

Qué servidores MCP puede acceder cada rol de agente

Rol email events analytics users blockchain tasks
executive
operations
marketing
governance
community
customCategorías MCP explícitas otorgadas individualmente por admin

Los agentes externos se registran con el rol custom por defecto. Un administrador de plataforma otorga categorías específicas por agente.

Límites de Velocidad

Para agentes autenticados

VentanaLímite
Por minuto60 requests
Por hora500 requests

Exceder el límite por minuto devuelve código de error -32001 con mensaje "Rate limit exceeded (60/min)".

Las solicitudes públicas (no autenticadas) están sujetas a limitación de velocidad estándar a nivel de servidor.

Servidor de Eventos

público POST /mcp/events

Accede a eventos comunitarios, propuestas y recuentos de asistentes. No se requiere autenticación para operaciones de lectura.

HerramientaDescripciónEntradas RequeridasAutenticación
list_eventsEventos próximos, activos o pasadosabierto
get_eventDetalle completo de un eventoevent_idabierto
list_proposalsPropuestas de gobernanzaabierto
get_proposalDetalle de una propuestaproposal_idabierto
get_event_attendees_countRecuento de asistentes registradosevent_idabierto
get_upcoming_events_summaryResumen corto para publicaciones en redes socialesabierto
create_eventCrear un nuevo eventotitle, dateclave
create_proposalEnviar una propuesta de gobernanzatitle, descriptionclave
cancel_eventCancelar un eventoevent_idclave

Ejemplo — listar eventos próximos

curl https://cafetech.lat/mcp/events \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_events",
      "arguments": { "status": "upcoming", "limit": 10 }
    }
  }'

Ejemplo en Python

import requests

def list_events(status="upcoming", limit=10):
    r = requests.post(
        "https://cafetech.lat/mcp/events",
        json={
            "jsonrpc": "2.0", "id": 1,
            "method": "tools/call",
            "params": {
                "name": "list_events",
                "arguments": {"status": status, "limit": limit}
            }
        }
    )
    return r.json()["result"]

events = list_events()
print(events)

Servidores MCP Privados

Disponibles solo para agentes registrados con el rol correcto

Los servidores privados siguen el mismo protocolo JSON-RPC 2.0 que los públicos. La única diferencia es que requieren un header X-Agent-Key válido.

ServidorLo que proporcionaRol Requerido
emailEnviar correos electrónicos transaccionales y comunitariosoperations / marketing / community / executive
blockchainInteracciones de DAO (tokens CAFE, NFTs, BSC)governance / executive
usersDatos de miembros de la comunidad (sin PII)operations / governance / executive
analyticsMétricas y reportes de plataformaoperations / marketing / governance / executive
tasksCrear y gestionar tareas de agentetodos los roles

Llamar a un servidor privado

curl https://cafetech.lat/mcp/analytics \
  -H "Content-Type: application/json" \
  -H "X-Agent-Key: your_agent_api_key" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }'
La PII (información de identificación personal), las claves privadas de billetera y las credenciales de administrador nunca son accesibles independientemente del rol.

Contrato de Agente

Construye un agente en cualquier lenguaje que la plataforma pueda llamar

Los agentes internos de CafeTech siguen una interfaz compartida (clase Ruby). Los agentes externos no necesitan ser Ruby — solo necesitan exponer un endpoint HTTP que la plataforma pueda hacer POST.

Endpoint mínimo requerido

POST /run

Cuerpo de la solicitud desde la plataforma:

{
  "context": {
    "triggered_by": "cafetech_platform",
    "agent_name": "ceo_agent",
    "payload": { "any": "data" }
  }
}

Respuesta esperada:

{
  "success": true,
  "result": { "your": "output" },
  "decision": "acted",
  "reasoning": "One-sentence explanation of what the agent did and why."
}

Endpoints opcionales recomendados

EndpointPropósito
POST /evaluatePrueba sin efectos secundarios — devuelve una decisión sin efectos secundarios
GET /healthDevuelve {"status": "healthy"}
GET /infoMetadatos del agente: nombre, versión, descripción, entradas, salidas

Compatibilidad con Framework

FrameworkCómo integrar
Anthropic Claude (tool use)Envuelve el endpoint REST como una herramienta con esquema de función
LangChainUsa requests dentro de un BaseTool personalizado
n8nNodos HTTP Request — POST al endpoint MCP
OpenAI AssistantsMismo formato de esquema de función que Claude
CrewAIEnvuelve como un BaseTool
AutoGenRegistra como una función invocable

Ejemplos

Implementaciones de agente mínimas

Python — servidor de agente mínimo

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

CAFETECH_BASE = "https://cafetech.lat"
MY_API_KEY    = "your_agent_api_key"

def cafetech_mcp(category, tool, arguments):
    """Helper to call any CafeTech MCP server."""
    return requests.post(
        f"{CAFETECH_BASE}/mcp/{category}",
        headers={
            "Content-Type": "application/json",
            "X-Agent-Key": MY_API_KEY
        },
        json={
            "jsonrpc": "2.0", "id": 1,
            "method": "tools/call",
            "params": {"name": tool, "arguments": arguments}
        }
    ).json().get("result")


@app.route("/run", methods=["POST"])
def run():
    payload = request.json.get("context", {}).get("payload", {})

    # Query the platform and do your work
    events = cafetech_mcp("events", "list_events", {"status": "upcoming"})

    return jsonify({
        "success": True,
        "result": {"events_found": len(events.get("events", []))},
        "decision": "acted",
        "reasoning": "Fetched upcoming events from CafeTech."
    })

@app.route("/health")
def health():
    return jsonify({"status": "healthy"})

@app.route("/info")
def info():
    return jsonify({
        "name": "my_custom_agent",
        "version": "1.0",
        "description": "Fetches and processes CafeTech events.",
        "inputs":  [{"name": "limit", "type": "integer", "required": False}],
        "outputs": [{"name": "events_found", "type": "integer"}]
    })

n8n — llamar a una herramienta MCP pública

1. Añade un nodo <strong class="text-white">HTTP Request</strong>

2. Método: POST · URL: https://cafetech.lat/mcp/events

3. Cuerpo (JSON):

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_events",
    "arguments": { "status": "upcoming" }
  }
}

Registro

Obtén una clave API para tu agente

01

Abre un issue

Presenta un issue en GitHub en CoffeTech/app-web con etiqueta agent-registration.

02

Describe tu agente

Propósito, qué categorías MCP necesitas, tu URL de endpoint /run, contacto.

03

Recibe tu clave

Admin aprueba y provisiona una api_key. Úsala como X-Agent-Key.

MCPs públicos (social_media, events) no requieren registro — llámanos directamente.

La gobernanza comunitaria puede proponer expandir o restringir el acceso de cualquier agente externo a través del sistema de propuestas DAO de la plataforma.

Contribuir Código

Cómo contribuir a la plataforma misma

Flujo de Trabajo

# 1. Fork & clone
git clone https://github.com/CoffeTech/app-web.git
cd app-web

# 2. Start local environment with hot reload
docker compose -f docker-compose.dev.yml up -d

# 3. Create a feature branch
git checkout -b feat/your-feature

# 4. Make changes and write tests
bundle exec rspec

# 5. Open a Pull Request against main

Lo que recibimos

TipoEjemplos
Correcciones de bugsCorregir comportamiento roto, salida incorrecta, crashes
Nuevos agentesAgentes externos que se conectan al sistema MCP
Herramientas MCPNuevas herramientas en servidores existentes
TestsSpecs unitarios e integración en spec/
DocumentaciónCorrecciones, traducciones, nuevas guías

Crear un nuevo agente (Ruby)

# app/services/agents/my_agent.rb
module Agents
  class MyAgent < BaseAgentV2
    VERSION     = "1.0"
    DESCRIPTION = "One sentence describing what this agent does."
    INPUTS  = [{ name: "target_id", type: "integer", required: true }]
    OUTPUTS = [{ name: "decision", type: "string" }]

    def run
      # Main execution loop — called by AgentRunnerJob
    end

    def evaluate(target, conditions = {})
      { decision: "act", should_act: true, reasoning: "..." }
    end

    def execute(target, decision, reasoning)
      # Side effects here
    end
  end
end

Checklist de Pull Request

  • Tests pasan (bundle exec rspec)
  • Sin nuevas vulnerabilidades de seguridad
  • Nuevos agentes registrados en docs/agents/AGENTS_REGISTRY.md
  • Nuevas herramientas MCP documentadas en docs/developers/MCP_PROTOCOL.md
  • La descripción del PR explica qué cambió y por qué
  • Cambios disruptivos claramente marcados

Los issues y PRs se pueden escribir en español, portugués o inglés.

Organización

Contribuyendo más allá de este repositorio

La organización de GitHub de CafeTech en github.com/CoffeTech aloja todos los repositorios de CafeTech.

Proponer un nuevo repositorio comunitario

  1. Abre un issue en CoffeTech/app-web etiquetado org-proposal
  2. Describe: propósito, stack, alcance, cómo se relaciona con la plataforma
  3. Si se aprueba, se crea un nuevo repo y podrías ser invitado como colaborador

Propuestas de Gobernanza

Las decisiones significativas de la plataforma se pueden enviar como propuestas a través del sistema de gobernanza DAO:

curl https://cafetech.lat/mcp/events \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "create_proposal",
      "arguments": {
        "title": "Add Discord MCP server",
        "description": "Detailed description..."
      }
    }
  }'