Milestone by Ouroboros Apps

Milestone by Ouroboros Apps: marcos de projeto freelance e critérios de aceitação

Servidor MCP hospedado

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

Instala no Claude Code, Codex, Cursor e outros

Documentação

Milestone

O Milestone mantém as definições de marcos aprovados de um freelancer e o que "concluído" significa, permitindo que um assistente leia esse registro antes de responder. Um assistente não pode afirmar que um marco está completo, nem que o próximo pagamento foi liberado, a menos que os critérios de aceitação salvos tenham sido atendidos. Ele não pode inventar uma entrega extra nem marcar como concluído um trabalho que não foi salvo.

Funciona com ChatGPT, Claude, Gemini, Grok e Cursor, além de qualquer outro cliente MCP que suporte Streamable HTTP e OAuth. Não é um plugin exclusivo do ChatGPT.

Entre com sua conta Milestone quando o assistente abrir o OAuth. Não cole uma chave de API ou senha em um cabeçalho. O Milestone suporta registro dinâmico de clientes: deixe o client id e o secret vazios. Os metadados do recurso protegido em /.well-known/oauth-protected-resource/mcp apontam os clientes para o emissor OAuth, que os registra.

As ferramentas do Milestone exigem Pro ou um teste ativo. Uma nova assinatura inclui um teste de 14 dias. Esta página não lista um preço. O checkout mostra o intervalo de cobrança e os termos de pagamento.

Para auto-hospedar, execute o servidor e use a URL base que você configurar. O endereço MCP padrão é http://127.0.0.1:3000/mcp.

Servidor hospedado

  • URL do servidor MCP: https://milestone-continuity2.vercel.app/mcp (Streamable HTTP, login OAuth)
  • Documentação: https://ouroborosapps.com/docs/milestone
  • Status: acesso antecipado. Cole a URL no modo desenvolvedor do Claude, Cursor, Grok ou ChatGPT.
  • Nome no registro: io.github.LAHutchins91/milestone

O que o assistente pode fazer

Após você aprovar a conexão, o servidor expõe estas ferramentas:

  • 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 é a leitura que o assistente deve fazer antes de responder. Ela inclui as definições de marcos, os critérios de aceitação que dizem o que "concluído" significa, as entregas e o trabalho salvos, e o que o assistente pode dizer ao cliente. Definições em rascunho não são um compromisso aprovado. Uma alteração de marco sugerida não altera o registro. Após os marcos serem aprovados, declare_milestone_complete se recusa a declarar um marco completo e declare_next_payment_released se recusa a dizer que o próximo pagamento foi liberado, a menos que todos os critérios de aceitação salvos naquele marco tenham sido atendidos. save_deliverable recusa uma entrega extra, e mark_work_done recusa trabalho que não foi salvo. Essas adições passam por suggest_milestone_change e depois accept_milestone_change, e somente quando você aprovar explicitamente essa alteração.

O assistente só chama essas ferramentas quando você e o host permitirem.

Conectar

Cursor, em ~/.cursor/mcp.json ou em um projeto .cursor/mcp.json:

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

Não adicione um bloco de cabeçalhos. O Cursor registra um cliente e abre o login.

Claude Code:

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

Não passe um cabeçalho Authorization. Outros clientes usam o mesmo endereço, escolhem OAuth e deixam o client id e o secret vazios. As etapas para ChatGPT, Claude, Gemini, Grok e Cursor estão na página de conexão em /connect.

Os metadados do registro para este servidor estão em server.json (io.github.LAHutchins91/milestone). A URL MCP remota pública lá é https://milestone-continuity2.vercel.app/mcp.

Executar

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

Quando o stdin é um terminal, o Milestone serve Streamable HTTP na porta 3000. Quando o stdin não é um terminal, ele fala MCP via stdio e ainda abre a porta HTTP. Os logs no modo stdio vão para o stderr para não se misturarem com o protocolo.

Os registros são armazenados de forma durável em um arquivo JSON. O caminho padrão é ~/.milestone/milestone.json. Defina MILESTONE_DATA_PATH para movê-lo. Um processo do servidor é dono desse arquivo. Não o aponte para o arquivo de dados de outro produto.

O OAuth usa a mesma ideia de um servidor de autorização Supabase com registro dinâmico de clientes. Defina estas variáveis no processo do servidor, não em um cabeçalho MCP:

  • APP_BASE_URL (padrão http://localhost:3000)
  • SUPABASE_URL
  • SUPABASE_ANON_KEY
  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET
  • STRIPE_PRICE_MONTHLY e STRIPE_PRICE_YEARLY (IDs de catálogo do Stripe, não um preço de produto)
  • OPENAI_APPS_CHALLENGE (token em texto simples servido em /.well-known/openai-apps-challenge; o caminho retorna 404 quando não definido)

Chamadas de ferramentas que não sejam de descoberta exigem uma conta conectada cujo status de assinatura seja active ou trialing.


Mais da Ouroboros: https://ouroborosapps.com