Milestone by Ouroboros Apps

Milestone by Ouroboros Apps: hitos de proyectos freelance y criterios de aceptación

Servidor MCP alojado

npx add-mcp 'https://milestone-continuity2.vercel.app/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Milestone

Milestone mantiene las definiciones de hitos aprobadas de un freelancer y qué significa "terminado", y luego permite que un asistente lea ese registro antes de responder. Un asistente no puede decir que un hito está completo, ni que el siguiente pago fue liberado, a menos que se hayan cumplido los criterios de aceptación guardados. No puede inventar un entregable adicional ni marcar como hecho un trabajo que no fue guardado.

Funciona con ChatGPT, Claude, Gemini, Grok y Cursor, además de cualquier otro cliente MCP que pueda usar Streamable HTTP y OAuth. No es un plugin exclusivo de ChatGPT.

Inicia sesión con tu cuenta de Milestone cuando el asistente abra OAuth. No pegues una clave de API ni una contraseña en un encabezado. Milestone admite registro dinámico de clientes: deja el client id y el secret vacíos. Los metadatos del recurso protegido en /.well-known/oauth-protected-resource/mcp apuntan a los clientes hacia el emisor de OAuth, que los registra.

Las herramientas de Milestone requieren Pro o una prueba activa. Una suscripción nueva incluye una prueba de 14 días. Esta página no lista un precio. El checkout muestra el intervalo de facturación y los términos de pago.

Para autoalojar, ejecuta el servidor y usa la URL base que configures. La dirección MCP predeterminada es http://127.0.0.1:3000/mcp.

Servidor alojado

  • URL del servidor MCP: https://milestone-continuity2.vercel.app/mcp (Streamable HTTP, inicio de sesión OAuth)
  • Documentación: https://ouroborosapps.com/docs/milestone
  • Estado: acceso temprano. Pega la URL en Claude, Cursor, Grok o el modo desarrollador de ChatGPT.
  • Nombre del registro: io.github.LAHutchins91/milestone

Lo que el asistente puede hacer

Después de que apruebes la conexión, el servidor expone estas herramientas:

  • list_milestone_sets
  • open_milestone_set
  • read_milestone_set
  • define_milestone
  • save_acceptance_criterion
  • save_deliverable
  • save_work_item
  • record_criterion_met
  • declare_milestone_complete
  • declare_next_payment_released
  • mark_work_done
  • write_client_wording
  • approve_milestones
  • suggest_milestone_change
  • accept_milestone_change

read_milestone_set es la lectura que el asistente debe hacer antes de responder. Incluye las definiciones de hitos, los criterios de aceptación que indican qué significa "terminado", los entregables y trabajos guardados, y lo que el asistente puede decirle al cliente. Los borradores de definiciones no son un compromiso aprobado. Un cambio de hito sugerido no modifica el registro. Después de que los hitos sean aprobados, declare_milestone_complete se niega a declarar un hito como completo y declare_next_payment_released se niega a decir que el siguiente pago fue liberado a menos que se haya cumplido cada criterio de aceptación guardado en ese hito. save_deliverable rechaza un entregable adicional, y mark_work_done rechaza trabajo que no fue guardado. Esas adiciones pasan por suggest_milestone_change y luego por accept_milestone_change, y solo cuando apruebas explícitamente ese cambio.

El asistente solo llama a estas herramientas cuando tú y el host lo permiten.

Conectar

Cursor, en ~/.cursor/mcp.json o un proyecto .cursor/mcp.json:

{
  "mcpServers": {
    "milestone": {
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

No agregues un bloque de encabezados. Cursor registra un cliente y abre el inicio de sesión.

Claude Code:

claude mcp add --transport http milestone http://127.0.0.1:3000/mcp

No pases un encabezado Authorization. Otros clientes usan la misma dirección, eligen OAuth y dejan el client id y el secret vacíos. Los pasos para ChatGPT, Claude, Gemini, Grok y Cursor están en la página de conexión en /connect.

Los metadatos del registro para este servidor están en server.json (io.github.LAHutchins91/milestone). La URL MCP remota pública allí es https://milestone-continuity2.vercel.app/mcp.

Ejecutar

npm install
npm test
npm run typecheck
npm run build
npm start

Cuando stdin es una terminal, Milestone sirve Streamable HTTP en el puerto 3000. Cuando stdin no es una terminal, habla MCP sobre stdio y aun así abre el puerto HTTP. Los registros durante el modo stdio van a stderr para no mezclarse con el protocolo.

Los registros se almacenan de forma duradera en un archivo JSON. La ruta predeterminada es ~/.milestone/milestone.json. Configura MILESTONE_DATA_PATH para moverla. Un proceso del servidor es dueño de ese archivo. No lo apuntes al archivo de datos de otro producto.

OAuth usa la misma idea que un servidor de autorización de Supabase con registro dinámico de clientes. Configura esto en el proceso del servidor, no en un encabezado MCP:

  • APP_BASE_URL (predeterminado http://localhost:3000)
  • SUPABASE_URL
  • SUPABASE_ANON_KEY
  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET
  • STRIPE_PRICE_MONTHLY y STRIPE_PRICE_YEARLY (IDs de catálogo de Stripe, no un precio de producto)
  • OPENAI_APPS_CHALLENGE (token en texto plano servido en /.well-known/openai-apps-challenge; la ruta devuelve 404 cuando no está configurado)

Las llamadas a herramientas que no sean de descubrimiento requieren una cuenta con sesión iniciada cuyo estado de suscripción sea active o trialing.


Más de Ouroboros: https://ouroborosapps.com