Servidor MCP que permite que agentes de IA interajam naturalmente com o Azure DevOps
Instalação • Recursos • Configuração • Exemplos • Permissões
Este é um servidor MCP (Model Context Protocol) que conecta agentes de IA (como Claude, ChatGPT via Cursor) ao Azure DevOps, permitindo que você converse em linguagem natural para:
- ✅ Consultar e criar Work Items (Tasks, Bugs, User Stories)
- ✅ Executar queries WIQL personalizadas
- ✅ Gerenciar Sprints (Iterations) e Boards
- ✅ Criar e revisar Pull Requests
- ✅ Gerenciar Teams e Repositories
- ✅ Editar Wiki Pages
Em vez de:
Abrir browser → Login Azure DevOps → Boards → New Work Item → Preencher formulário...
Você faz:
User: "Crie uma task para implementar autenticação JWT com prioridade alta"
Agent: ✅ Task #456 criada com sucesso!
┌─────────────────────────────────────────────────────────────────┐
│ CURSOR / AI AGENT │
│ (Claude, ChatGPT, etc) │
└────────────────────────────┬────────────────────────────────────┘
│
│ Model Context Protocol (MCP)
│
┌────────────────────────────▼────────────────────────────────────┐
│ MCP SERVER (este projeto) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ MCP Layer │ │
│ │ ├─ 12 Resources (read-only data sources) │ │
│ │ └─ 27 Tools (executable actions) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Business Logic Layer │ │
│ │ ├─ Work Items API ├─ Pull Requests API │ │
│ │ ├─ WIQL API ├─ Teams API │ │
│ │ ├─ Boards API ├─ Repositories API │ │
│ │ ├─ Iterations API └─ Wikis API │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Core Infrastructure │ │
│ │ ├─ Retry Policy (exponential backoff) │ │
│ │ ├─ Circuit Breaker (failure protection) │ │
│ │ ├─ Rate Limiter (token bucket) │ │
│ │ ├─ Logger (with credential redaction) │ │
│ │ └─ Telemetry (performance metrics) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Providers Layer │ │
│ │ ├─ HTTP Provider (axios + REST API) │ │
│ │ └─ SDK Provider (azure-devops-node-api) │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│
│ HTTPS + Personal Access Token (PAT)
│
┌────────────────────────────▼────────────────────────────────────┐
│ AZURE DEVOPS REST API │
│ https://dev.azure.com/{organization}/{project} │
└──────────────────────────────────────────────────────────────────┘
mcp-azure-devops/
├── src/ # Código-fonte TypeScript
│ ├── index.ts # Entry point (inicialização do servidor)
│ ├── server.ts # Configuração do MCP Server
│ │
│ ├── mcp/ # MCP Layer
│ │ ├── resources/ # 12 Resources (data sources)
│ │ │ └── index.ts # Handlers de resources
│ │ ├── tools/ # 27 Tools (actions)
│ │ │ └── index.ts # Handlers de tools
│ │ └── schemas/ # JSON Schemas de validação
│ │ └── index.ts # Schemas dos tools
│ │
│ └── wrapper/ # Backend Wrapper
│ ├── index.ts # Client principal
│ │
│ ├── config/ # Configuração
│ │ ├── env.ts # Leitura de variáveis de ambiente
│ │ └── index.ts # Config object (frozen)
│ │
│ ├── core/ # Core Infrastructure
│ │ ├── auth.ts # Authentication Manager
│ │ ├── resilience.ts # Retry Policy + Circuit Breaker
│ │ └── rules.ts # Rate Limiter + Validation
│ │
│ ├── logging/ # Logging & Telemetry
│ │ ├── logger.ts # Logger (pino + redaction)
│ │ └── telemetry.ts # Performance metrics
│ │
│ ├── providers/ # Providers Layer
│ │ ├── base.provider.ts # Interface abstrata
│ │ ├── http.provider.ts # HTTP Client (axios)
│ │ ├── sdk.provider.ts # SDK Client (oficial)
│ │ └── index.ts # Factory
│ │
│ ├── api/ # Business Logic APIs
│ │ ├── work-items.ts # Work Items CRUD + WIQL
│ │ ├── wiql.ts # WIQL Queries
│ │ ├── boards.ts # Boards Management
│ │ ├── iterations.ts # Iterations/Sprints
│ │ ├── pull-requests.ts # Pull Requests
│ │ ├── repositories.ts # Git Repositories
│ │ ├── teams.ts # Teams Management
│ │ └── wiki.ts # Wiki Pages
│ │
│ └── types/ # TypeScript Types
│ ├── index.ts # Exports
│ ├── work-items.ts # Work Item types
│ ├── boards.ts # Board types
│ ├── iterations.ts # Iteration types
│ ├── pull-requests.ts # PR types
│ ├── teams.ts # Team types
│ ├── wiki.ts # Wiki types
│ └── providers.ts # Provider types
│
├── dist/ # JavaScript compilado (gerado)
├── tests/ # Testes
│ ├── integration/ # Testes de integração
│ └── mcp/ # Testes MCP
│
├── docs/ # Documentação adicional
│
├── package.json # Dependências e scripts
├── tsconfig.json # Configuração TypeScript
├── .gitignore # Arquivos ignorados
├── cursor-mcp-config-example.json # Exemplo de config
├── README.md # Este arquivo
├── QUICKSTART.md # Guia rápido
├── ARCHITECTURE.md # Arquitetura detalhada
└── LICENSE # Licença MIT
- Node.js >= 18.0.0
- npm >= 9.0.0
- Conta no Azure DevOps
- Personal Access Token (PAT) com permissões apropriadas
- Cursor (ou outro cliente MCP)
git clone https://github.com/seu-usuario/mcp-azure-devops.git
cd mcp-azure-devopsnpm installDependências principais:
@modelcontextprotocol/sdk- SDK oficial do MCPazure-devops-node-api- SDK oficial do Azure DevOpsaxios- HTTP clientpino- Logger profissionaldotenv- Gerenciamento de variáveis de ambiente
npm run buildIsso irá:
- Compilar TypeScript → JavaScript
- Gerar pasta
dist/com código compilado - Gerar source maps e type definitions
ls dist/
# Deve mostrar: index.js, server.js, mcp/, wrapper/, etc-
Acesse Azure DevOps:
https://dev.azure.com/{sua-org} -
Clique em User Settings (ícone de usuário) → Personal Access Tokens
-
Clique em New Token
-
Configure:
- Name:
MCP Server Token - Organization: Sua organização
- Expiration: 90 dias (ou custom)
- Scopes: Ver seção Permissões
- Name:
-
Clique em Create e copie o token (não será mostrado novamente!)
Edite o arquivo de configuração do Cursor:
macOS/Linux: ~/.cursor/mcp.json
Windows: %USERPROFILE%\.cursor\mcp.json
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": [
"/caminho/completo/para/mcp-azure-devops/dist/index.js"
],
"env": {
"AZURE_DEVOPS_PAT": "seu_personal_access_token_aqui",
"AZURE_DEVOPS_ORG": "sua_organizacao",
"AZURE_DEVOPS_PROJECT": "seu_projeto",
"LOG_LEVEL": "info",
"NODE_ENV": "production"
}
}
}
}- Substitua
/caminho/completo/para/pelo path absoluto do projeto - Substitua
seu_personal_access_token_aquipelo PAT gerado - Substitua
sua_organizacaopelo nome da sua org no Azure DevOps - Substitua
seu_projetopelo nome do projeto
📌 Exemplo:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": [
"/home/usuario/projetos/mcp-azure-devops/dist/index.js"
],
"env": {
"AZURE_DEVOPS_PAT": "abc123xyz789...",
"AZURE_DEVOPS_ORG": "minha-empresa",
"AZURE_DEVOPS_PROJECT": "Projeto-Principal"
}
}
}
}Feche completamente o Cursor e reabra.
No Cursor, pergunte ao agente:
"Quais são minhas tasks pendentes no Azure DevOps?"
Se tudo estiver correto, o agente irá acessar o resource azure://work-items/my-tasks e listar suas tasks!
Resources são fontes de dados read-only que o agente pode consultar. Funcionam como "páginas web" que o agente acessa para obter informações.
| URI | Descrição | Retorna | Limite |
|---|---|---|---|
azure://work-items/my-tasks |
Tasks atribuídas ao usuário atual | Work Items onde AssignedTo = @Me e State != Done |
50 itens |
azure://work-items/bugs |
Todos os bugs abertos do projeto | Work Items onde WorkItemType = Bug e State != Done |
100 itens |
azure://work-items/all |
Todos os work items (recentes) | Todos os Work Items ordenados por data de modificação | 200 itens |
azure://project/info |
Health do servidor e informações do projeto | Status de conexão, circuit breaker, rate limit, provider ativo | - |
azure://boards/list |
Lista de boards do projeto | Todos os boards com ID, nome e URL | - |
azure://boards/{id}/config |
Configuração de um board específico | Colunas, settings, visibilidade de backlog | - |
azure://iterations/all |
Todas as iterations (sprints) | Iterations passadas, atual e futuras | - |
azure://iterations/current |
Sprint atual com work items | Iteration atual + lista de work items da sprint | - |
azure://iterations/{id}/capacity |
Capacity planning de uma iteration | Capacidade por usuário, atividade e time | - |
azure://pullrequests/active |
Pull Requests ativos | PRs com status active (não completed/abandoned) |
- |
azure://teams/list |
Teams do projeto | Todos os teams com ID, nome, descrição | - |
azure://wikis/list |
Wikis do projeto | Todas as wikis com ID, nome, tipo (project/code) | - |
💡 Como o agente usa:
User: "Quais são os bugs críticos abertos?"
Agent:
1. Acessa resource: azure://work-items/bugs
2. Filtra por prioridade crítica
3. Retorna: "🔥 Encontrei 3 bugs críticos: #123, #456, #789"
Tools são ações que modificam dados no Azure DevOps. O agente as executa quando você pede para criar, atualizar ou deletar algo.
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_create_work_item |
Cria um novo work item (Task, Bug, User Story, etc) | ✅ Work Items: Read & Write | |
azure_update_work_item |
Atualiza campos de um work item existente | ✅ Work Items: Read & Write | |
azure_delete_work_item |
Deleta um work item (move para Recycle Bin) | ✅ Work Items: Read & Write | 🔴 CRÍTICO: Ação irreversível (pode recuperar da lixeira em 30 dias). |
azure_get_work_item |
Busca um work item por ID | ✅ Work Items: Read | - |
azure_query_work_items |
Executa query WIQL customizada | ✅ Work Items: Read | |
azure_get_my_tasks |
Busca tasks do usuário atual | ✅ Work Items: Read | - |
azure_get_critical_bugs |
Busca bugs com prioridade crítica | ✅ Work Items: Read | - |
Exemplo de uso:
// Criação de task
User: "Crie uma task 'Implementar login JWT' com prioridade alta"
Agent: Chama azure_create_work_item({
type: "Task",
title: "Implementar login JWT",
priority: 1
})
Result: ✅ Task #456 criada!| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_boards |
Lista todos os boards do projeto | ✅ Work Items: Read | - |
azure_get_board_config |
Obtém configuração de um board | ✅ Work Items: Read | - |
azure_update_board |
Atualiza configuração de board | ✅ Work Items: Read & Write + Project & Team: Read, Write & Manage |
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_iterations |
Lista todas as iterations (sprints) | ✅ Work Items: Read | - |
azure_create_iteration |
Cria uma nova iteration/sprint | ✅ Work Items: Read & Write + Project & Team: Read, Write & Manage | |
azure_get_current_iteration |
Obtém sprint atual com work items | ✅ Work Items: Read | - |
azure_delete_iteration |
Deleta uma iteration | ✅ Work Items: Read & Write + Project & Team: Read, Write & Manage | 🔴 CRÍTICO: Work items não são deletados, apenas desassociados da sprint. |
azure_get_iteration_capacity |
Obtém capacity planning de uma sprint | ✅ Work Items: Read | - |
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_pull_requests |
Lista PRs de um repositório | ✅ Code: Read | - |
azure_create_pull_request |
Cria um novo Pull Request | ✅ Code: Read & Write |
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_teams |
Lista todos os teams do projeto | ✅ Project & Team: Read | - |
azure_get_team |
Obtém detalhes de um team | ✅ Project & Team: Read | - |
azure_create_team |
Cria um novo team | ✅ Project & Team: Read, Write & Manage |
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_repositories |
Lista todos os repositórios do projeto | ✅ Code: Read | - |
azure_get_repository |
Obtém detalhes de um repositório | ✅ Code: Read | - |
| Tool | Descrição | Permissão Necessária | Alertas |
|---|---|---|---|
azure_list_wikis |
Lista todas as wikis do projeto | ✅ Wiki: Read | - |
azure_get_wiki |
Obtém detalhes de uma wiki | ✅ Wiki: Read | - |
azure_create_wiki |
Cria uma nova wiki | ✅ Wiki: Read & Write | projectWiki ou codeWiki. |
azure_list_wiki_pages |
Lista páginas de uma wiki | ✅ Wiki: Read | - |
azure_get_wiki_page |
Obtém conteúdo de uma página | ✅ Wiki: Read | - |
azure_create_wiki_page |
Cria uma nova página na wiki | ✅ Wiki: Read & Write | |
azure_update_wiki_page |
Atualiza uma página existente | ✅ Wiki: Read & Write | eTag da versão anterior para evitar conflitos. |
Para apenas consultar dados (resources):
✅ Work Items: Read
✅ Code: Read
✅ Wiki: Read
✅ Project & Team: Read
Como configurar:
- Azure DevOps → User Settings → Personal Access Tokens
- New Token → Custom defined
- Selecione apenas: Work Items (Read), Code (Read), Wiki (Read)
Para criar e modificar dados (tools):
✅ Work Items: Read & Write
✅ Code: Read & Write
✅ Wiki: Read & Write
✅ Project & Team: Read
Para gerenciar boards, sprints e teams:
✅ Work Items: Read & Write
✅ Code: Read & Write
✅ Wiki: Read & Write
✅ Project & Team: Read, Write & Manage
- Criar/deletar teams
- Modificar configuração de boards
- Criar/deletar sprints
- Alterar estrutura do projeto
Teste cada permissão:
# Read-only test
User: "Liste meus work items"
→ Se funcionar: ✅ Work Items Read OK
# Write test
User: "Crie uma task de teste"
→ Se funcionar: ✅ Work Items Write OK
→ Se erro 403: ❌ Falta permissão de Write
# Admin test
User: "Crie um novo sprint"
→ Se funcionar: ✅ Project & Team Manage OK
→ Se erro 403: ❌ Falta permissão de ManageUser: "Quais são minhas tasks pendentes?"
Agent: [Acessa azure://work-items/my-tasks]
📋 Você tem 3 tasks pendentes:
1. #456 - Implementar autenticação JWT (To Do) - Prioridade: 1
2. #457 - Corrigir parser de markdown (In Progress) - Prioridade: 2
3. #789 - Refatorar componente de login (To Do) - Prioridade: 3
User: "Crie uma task para implementar cache Redis com prioridade alta"
Agent: [Chama azure_create_work_item]
✅ Task criada com sucesso!
📋 ID: #890
📝 Título: Implementar cache Redis
⏰ Estado: To Do
⚡ Prioridade: 1 (Alta)
🔗 URL: https://dev.azure.com/sua-org/projeto/_workitems/edit/890
User: "Marque a task #456 como Done"
Agent: [Chama azure_update_work_item]
✅ Task #456 atualizada!
📋 ID: #456
📝 Título: Implementar autenticação JWT
⏰ Estado: To Do → Done ✅
User: "Me mostre todos os bugs criados nos últimos 7 dias com prioridade crítica"
Agent: [Chama azure_query_work_items]
🔍 Query WIQL:
SELECT [System.Id], [System.Title], [System.State]
FROM WorkItems
WHERE [System.WorkItemType] = 'Bug'
AND [Microsoft.VSTS.Common.Priority] = 1
AND [System.CreatedDate] >= @Today - 7
🔥 Encontrados 2 bugs críticos:
1. #891 - Login falha no iOS 17 (New)
2. #892 - Crash ao abrir perfil (New)
User: "Crie um sprint de 2 semanas começando segunda-feira"
Agent: [Chama azure_create_iteration]
✅ Sprint criado com sucesso!
📅 Nome: Sprint 15
📆 Início: 2025-11-10
📆 Fim: 2025-11-24
🔗 URL: https://dev.azure.com/sua-org/projeto/_sprints/...
User: "Crie um PR da branch feature/login para main com título 'Implementa autenticação JWT'"
Agent: [Chama azure_create_pull_request]
✅ Pull Request criado!
🔀 ID: #42
📝 Título: Implementa autenticação JWT
🌿 Source: feature/login → main
👤 Autor: Você
🔗 URL: https://dev.azure.com/sua-org/projeto/_git/repo/pullrequest/42
User: "Crie uma página 'Getting Started' na wiki do projeto"
Agent: [Chama azure_create_wiki_page]
✅ Página criada!
📖 Wiki: Project Wiki
📄 Path: /Getting-Started
🔗 URL: https://dev.azure.com/sua-org/projeto/_wiki/wikis/...
Sintomas:
- Cursor não mostra o servidor MCP na lista
- Agente não consegue acessar resources
Soluções:
- Verifique que o path no
mcp.jsonestá correto (caminho absoluto) - Confirme que executou
npm run build(pastadist/existe) - Verifique sintaxe JSON do arquivo
mcp.json - Reinicie o Cursor completamente (feche todas as janelas)
- Verifique logs do Cursor:
Help → Show Logs
Sintomas:
Error: Request failed with status code 401
Causas:
- PAT inválido ou expirado
- PAT não configurado corretamente
Soluções:
- Verifique que o PAT está correto no
mcp.json - Gere um novo PAT no Azure DevOps
- Confirme que o PAT não expirou
- Teste o PAT manualmente:
curl -u :SEU_PAT https://dev.azure.com/sua-org/_apis/projectsSintomas:
Error: Request failed with status code 403
Causas:
- PAT sem permissões suficientes
- Usuário sem acesso ao projeto
Soluções:
- Verifique permissões do PAT (ver seção Permissões)
- Confirme que seu usuário tem acesso ao projeto no Azure DevOps
- Para ações de Write: PAT precisa de Read & Write
- Para ações de Manage: PAT precisa de Read, Write & Manage
Sintomas:
Error: Work item type 'Task' not found
Causas:
- Tipo de work item não existe no process template do projeto
Soluções:
- Verifique os tipos disponíveis no seu projeto:
- Azure DevOps → Project Settings → Process
- Process templates comuns:
- Agile: Task, Bug, User Story, Epic, Feature
- Scrum: Task, Bug, Product Backlog Item, Epic, Feature
- CMMI: Task, Bug, Requirement, Epic, Feature
- Basic: Issue, Task, Epic
- Use o tipo correto para o seu project template
Sintomas:
Error: Invalid WIQL query syntax
Causas:
- Sintaxe WIQL inválida
- Campo não existe no projeto
- Operador inválido
Soluções:
- Valide a sintaxe WIQL:
-- ✅ Correto
SELECT [System.Id], [System.Title]
FROM WorkItems
WHERE [System.State] = 'Active'
-- ❌ Errado (falta FROM)
SELECT [System.Id], [System.Title]
WHERE [System.State] = 'Active'- Teste a query no Azure DevOps:
- Boards → Queries → New Query → Editor
- Confirme que campos existem:
[System.FieldName] - Use campos padrão quando possível
Sintomas:
Error: Circuit breaker is OPEN - too many failures
Causas:
- Muitas requisições falharam recentemente
- Azure DevOps pode estar indisponível
Soluções:
- Aguarde 1 minuto (circuit breaker se reseta automaticamente)
- Verifique status do Azure DevOps: https://status.dev.azure.com
- Verifique sua conexão de internet
- Consulte health do servidor:
User: "Qual o status do servidor?"
Agent: [Acessa azure://project/info]
Sintomas:
Error: Rate limit exceeded - too many requests
Causas:
- Muitas requisições em curto período
- Rate limiter protege contra spam
Soluções:
- Aguarde alguns segundos
- Evite fazer muitas requisições simultâneas
- Rate limit padrão: 100 requisições/minuto
Para investigar problemas, ative logs detalhados:
{
"mcpServers": {
"azure-devops": {
"env": {
"LOG_LEVEL": "debug",
"NODE_ENV": "development"
}
}
}
}Logs serão exibidos no stderr do Cursor.
# Clone
git clone https://github.com/seu-usuario/mcp-azure-devops.git
cd mcp-azure-devops
# Instale
npm install
# Build
npm run build
# Watch mode (rebuild automático)
npm run devnpm run dev # Modo desenvolvimento (tsx watch)
npm run build # Compila TypeScript → JavaScript
npm run start # Inicia servidor (node dist/index.js)
npm run test # Executa testes (jest)
npm run test:watch # Testes em watch mode
npm run lint # ESLint
npm run clean # Remove dist/# Todos os testes
npm test
# Testes específicos
npm test -- work-items
# Cobertura
npm test -- --coveragetests/
├── integration/ # Testes de integração com Azure DevOps real
│ └── work-items.test.ts
└── mcp/ # Testes de handlers MCP
├── resources.test.ts
└── tools.test.ts
- QUICKSTART.md - Guia rápido de 5 minutos
- ARCHITECTURE.md - Arquitetura detalhada e decisões de design
- Model Context Protocol (MCP) - Especificação oficial
- Azure DevOps REST API - Documentação da API
- WIQL Syntax Reference - Referência de queries
- Azure DevOps Node API - SDK oficial
Contribuições são muito bem-vindas! Este projeto é open source e livre para uso.
- Fork o repositório
- Clone seu fork
- Crie uma branch:
git checkout -b feature/minha-feature - Faça suas alterações
- Commit:
git commit -m "feat: adiciona nova feature" - Push:
git push origin feature/minha-feature - Abra um Pull Request
-
Commits: Seguimos Conventional Commits
feat:- Nova funcionalidadefix:- Correção de bugdocs:- Documentaçãorefactor:- Refatoraçãotest:- Testeschore:- Tarefas de manutenção
-
Code Style: ESLint + Prettier (automático)
-
Type Safety: TypeScript strict mode
- 🐛 Bug Fixes - Reporte ou corrija bugs
- ✨ Features - Novas funcionalidades
- 📖 Documentação - Melhore ou traduza docs
- 🧪 Testes - Aumente cobertura de testes
- 🎨 UX - Melhore mensagens e exemplos
- 🌍 i18n - Traduções para outros idiomas
MIT License - Livre para uso comercial e pessoal
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Pode:
- ✅ Usar comercialmente
- ✅ Modificar como quiser
- ✅ Distribuir
- ✅ Usar em projetos privados
- ✅ Vender (se quiser)
Não precisa:
- ❌ Pedir permissão
- ❌ Dar créditos (mas é legal se fizer!)
- ❌ Compartilhar suas modificações
- ❌ Usar a mesma licença
Tradução livre: "Pega, clona, mexe e não me incomoda!" 😎
Feito com ❤️ para a comunidade de desenvolvimento