@andrebuzeli/git-mcp 2.28.1 → 2.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +306 -306
- package/dist/client.js +298 -298
- package/dist/config.d.ts +310 -310
- package/dist/config.js +392 -392
- package/dist/index.d.ts +22 -22
- package/dist/index.js +89 -89
- package/dist/providers/base-provider.d.ts +160 -160
- package/dist/providers/base-provider.js +274 -274
- package/dist/providers/error-handler.d.ts +74 -50
- package/dist/providers/error-handler.d.ts.map +1 -1
- package/dist/providers/error-handler.js +234 -175
- package/dist/providers/error-handler.js.map +1 -1
- package/dist/providers/gitea-provider.d.ts +97 -97
- package/dist/providers/gitea-provider.d.ts.map +1 -1
- package/dist/providers/gitea-provider.js +1015 -1001
- package/dist/providers/gitea-provider.js.map +1 -1
- package/dist/providers/github-provider.d.ts +104 -104
- package/dist/providers/github-provider.d.ts.map +1 -1
- package/dist/providers/github-provider.js +1248 -1234
- package/dist/providers/github-provider.js.map +1 -1
- package/dist/providers/index.d.ts +12 -12
- package/dist/providers/index.js +40 -40
- package/dist/providers/provider-factory.d.ts +74 -74
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +318 -311
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/types.d.ts +318 -318
- package/dist/providers/types.js +6 -6
- package/dist/server.d.ts +76 -76
- package/dist/server.js +306 -306
- package/dist/server.js.map +1 -1
- package/dist/tools/git-archive.d.ts +169 -165
- package/dist/tools/git-archive.d.ts.map +1 -1
- package/dist/tools/git-archive.js +246 -233
- package/dist/tools/git-archive.js.map +1 -1
- package/dist/tools/git-branches.d.ts +434 -430
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +640 -627
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-commits.d.ts +489 -485
- package/dist/tools/git-commits.d.ts.map +1 -1
- package/dist/tools/git-commits.js +748 -735
- package/dist/tools/git-commits.js.map +1 -1
- package/dist/tools/git-config.d.ts +144 -140
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js +281 -268
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts +490 -486
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +620 -607
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-initialize.d.ts +46 -42
- package/dist/tools/git-initialize.d.ts.map +1 -1
- package/dist/tools/git-initialize.js +81 -68
- package/dist/tools/git-initialize.js.map +1 -1
- package/dist/tools/git-issues.d.ts +578 -571
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +754 -740
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +701 -694
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +746 -732
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-releases.d.ts +494 -487
- package/dist/tools/git-releases.d.ts.map +1 -1
- package/dist/tools/git-releases.js +571 -557
- package/dist/tools/git-releases.js.map +1 -1
- package/dist/tools/git-remote.d.ts +142 -138
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js +287 -274
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-repositories.d.ts +487 -483
- package/dist/tools/git-repositories.d.ts.map +1 -1
- package/dist/tools/git-repositories.js +653 -640
- package/dist/tools/git-repositories.js.map +1 -1
- package/dist/tools/git-reset.d.ts +134 -130
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js +236 -223
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-revert.d.ts +153 -149
- package/dist/tools/git-revert.d.ts.map +1 -1
- package/dist/tools/git-revert.js +211 -198
- package/dist/tools/git-revert.js.map +1 -1
- package/dist/tools/git-stash.d.ts +144 -140
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js +282 -269
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-sync.d.ts +182 -178
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js +325 -312
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts +418 -411
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +499 -485
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-upload-project.d.ts +5 -1
- package/dist/tools/git-upload-project.d.ts.map +1 -1
- package/dist/tools/git-upload-project.js +21 -1
- package/dist/tools/git-upload-project.js.map +1 -1
- package/dist/tools/git-webhooks.d.ts +477 -470
- package/dist/tools/git-webhooks.d.ts.map +1 -1
- package/dist/tools/git-webhooks.js +561 -543
- package/dist/tools/git-webhooks.js.map +1 -1
- package/dist/utils/git-error-analyzer.d.ts +64 -0
- package/dist/utils/git-error-analyzer.d.ts.map +1 -0
- package/dist/utils/git-error-analyzer.js +286 -0
- package/dist/utils/git-error-analyzer.js.map +1 -0
- package/dist/utils/terminal-controller.d.ts +80 -80
- package/dist/utils/terminal-controller.js +345 -345
- package/dist/utils/user-detection.d.ts +24 -24
- package/dist/utils/user-detection.js +53 -53
- package/package.json +2 -2
- package/dist/tools/gh-actions.d.ts +0 -253
- package/dist/tools/gh-actions.d.ts.map +0 -1
- package/dist/tools/gh-actions.js +0 -390
- package/dist/tools/gh-actions.js.map +0 -1
- package/dist/tools/gh-analytics.d.ts +0 -264
- package/dist/tools/gh-analytics.d.ts.map +0 -1
- package/dist/tools/gh-analytics.js +0 -402
- package/dist/tools/gh-analytics.js.map +0 -1
- package/dist/tools/gh-code-review.d.ts +0 -305
- package/dist/tools/gh-code-review.d.ts.map +0 -1
- package/dist/tools/gh-code-review.js +0 -513
- package/dist/tools/gh-code-review.js.map +0 -1
- package/dist/tools/gh-codespaces.d.ts +0 -139
- package/dist/tools/gh-codespaces.d.ts.map +0 -1
- package/dist/tools/gh-codespaces.js +0 -283
- package/dist/tools/gh-codespaces.js.map +0 -1
- package/dist/tools/gh-deployments.d.ts +0 -301
- package/dist/tools/gh-deployments.d.ts.map +0 -1
- package/dist/tools/gh-deployments.js +0 -368
- package/dist/tools/gh-deployments.js.map +0 -1
- package/dist/tools/gh-gists.d.ts +0 -175
- package/dist/tools/gh-gists.d.ts.map +0 -1
- package/dist/tools/gh-gists.js +0 -322
- package/dist/tools/gh-gists.js.map +0 -1
- package/dist/tools/gh-projects.d.ts +0 -206
- package/dist/tools/gh-projects.d.ts.map +0 -1
- package/dist/tools/gh-projects.js +0 -359
- package/dist/tools/gh-projects.js.map +0 -1
- package/dist/tools/gh-security.d.ts +0 -275
- package/dist/tools/gh-security.d.ts.map +0 -1
- package/dist/tools/gh-security.js +0 -396
- package/dist/tools/gh-security.js.map +0 -1
- package/dist/tools/gh-sync.d.ts +0 -214
- package/dist/tools/gh-sync.d.ts.map +0 -1
- package/dist/tools/gh-sync.js +0 -379
- package/dist/tools/gh-sync.js.map +0 -1
- package/dist/tools/gh-workflows.d.ts +0 -291
- package/dist/tools/gh-workflows.d.ts.map +0 -1
- package/dist/tools/gh-workflows.js +0 -433
- package/dist/tools/gh-workflows.js.map +0 -1
- package/dist/tools/git-bundle.d.ts +0 -172
- package/dist/tools/git-bundle.d.ts.map +0 -1
- package/dist/tools/git-bundle.js +0 -242
- package/dist/tools/git-bundle.js.map +0 -1
- package/dist/tools/git-cherry-pick.d.ts +0 -159
- package/dist/tools/git-cherry-pick.d.ts.map +0 -1
- package/dist/tools/git-cherry-pick.js +0 -225
- package/dist/tools/git-cherry-pick.js.map +0 -1
- package/dist/tools/git-rebase.d.ts +0 -138
- package/dist/tools/git-rebase.d.ts.map +0 -1
- package/dist/tools/git-rebase.js +0 -214
- package/dist/tools/git-rebase.js.map +0 -1
- package/dist/tools/git-submodule.d.ts +0 -153
- package/dist/tools/git-submodule.d.ts.map +0 -1
- package/dist/tools/git-submodule.js +0 -290
- package/dist/tools/git-submodule.js.map +0 -1
- package/dist/tools/git-worktree.d.ts +0 -160
- package/dist/tools/git-worktree.d.ts.map +0 -1
- package/dist/tools/git-worktree.js +0 -270
- package/dist/tools/git-worktree.js.map +0 -1
- package/dist/tools/repositories.d.ts +0 -406
- package/dist/tools/repositories.d.ts.map +0 -1
- package/dist/tools/repositories.js +0 -570
- package/dist/tools/repositories.js.map +0 -1
- package/dist/tools/users.d.ts +0 -373
- package/dist/tools/users.d.ts.map +0 -1
- package/dist/tools/users.js +0 -500
- package/dist/tools/users.js.map +0 -1
- package/dist/tools/validator.d.ts +0 -171
- package/dist/tools/validator.d.ts.map +0 -1
- package/dist/tools/validator.js +0 -195
- package/dist/tools/validator.js.map +0 -1
- package/dist/tools/version-control.d.ts +0 -137
- package/dist/tools/version-control.d.ts.map +0 -1
- package/dist/tools/version-control.js +0 -165
- package/dist/tools/version-control.js.map +0 -1
package/dist/server.js
CHANGED
|
@@ -1,307 +1,307 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GiteaMCPServer = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
/**
|
|
10
|
-
* Importação de todas as ferramentas MCP disponíveis (18 tools)
|
|
11
|
-
*
|
|
12
|
-
* GIT CORE (18 tools) - Funcionam com GitHub + Gitea:
|
|
13
|
-
* - git-repositories: Gerenciamento de repositórios
|
|
14
|
-
* - git-commits: Operações com commits
|
|
15
|
-
* - git-branches: Operações com branches
|
|
16
|
-
* - git-tags: Gerenciamento de tags
|
|
17
|
-
* - git-files: Gerenciamento de arquivos
|
|
18
|
-
* - git-upload-project: Upload completo de projeto
|
|
19
|
-
* - git-initialize: Inicialização completa de repositório
|
|
20
|
-
* - git-issues: Gerenciamento de issues
|
|
21
|
-
* - git-pulls: Pull requests e merges
|
|
22
|
-
* - git-releases: Gerenciamento de releases
|
|
23
|
-
* - git-webhooks: Gerenciamento de webhooks
|
|
24
|
-
* - git-reset: Operações de reset
|
|
25
|
-
* - git-revert: Operações de revert
|
|
26
|
-
* - git-stash: Gerenciamento de stash
|
|
27
|
-
* - git-config: Configuração do Git
|
|
28
|
-
* - git-remote: Gerenciamento de remotes
|
|
29
|
-
* - git-archive: Criação de arquivos
|
|
30
|
-
* - git-sync: Sincronização de repositórios
|
|
31
|
-
*/
|
|
32
|
-
// Git Core Tools (18)
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
/**
|
|
52
|
-
* Array de todas as ferramentas disponíveis (18 tools)
|
|
53
|
-
*
|
|
54
|
-
* ESTRUTURA:
|
|
55
|
-
* - Cada tool deve implementar a interface Tool
|
|
56
|
-
* - Nome, descrição e schema são obrigatórios
|
|
57
|
-
* - Handler deve ser assíncrono e retornar resultado
|
|
58
|
-
*
|
|
59
|
-
* ORGANIZAÇÃO:
|
|
60
|
-
* - Git Core (18): Funcionam com GitHub + Gitea
|
|
61
|
-
*
|
|
62
|
-
* USO:
|
|
63
|
-
* - Para listagem de tools disponíveis
|
|
64
|
-
* - Para execução de tools específicas
|
|
65
|
-
* - Para validação de parâmetros
|
|
66
|
-
*/
|
|
67
|
-
const tools = [
|
|
68
|
-
// Git Core Tools (18) - GitHub + Gitea
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
];
|
|
88
|
-
/**
|
|
89
|
-
* Servidor MCP principal para Gitea
|
|
90
|
-
*
|
|
91
|
-
* RESPONSABILIDADES:
|
|
92
|
-
* - Inicializar servidor MCP
|
|
93
|
-
* - Registrar handlers para requests
|
|
94
|
-
* - Gerenciar ciclo de vida das tools
|
|
95
|
-
* - Tratar erros e validações
|
|
96
|
-
*
|
|
97
|
-
* ARQUITETURA:
|
|
98
|
-
* - Server MCP padrão com transport stdio
|
|
99
|
-
* - Handlers para list e call de tools
|
|
100
|
-
* - Tratamento centralizado de erros
|
|
101
|
-
*
|
|
102
|
-
* RECOMENDAÇÕES:
|
|
103
|
-
* - Use apenas uma instância por processo
|
|
104
|
-
* - Configure handlers antes de conectar
|
|
105
|
-
* - Implemente graceful shutdown
|
|
106
|
-
*/
|
|
107
|
-
class GiteaMCPServer {
|
|
108
|
-
server;
|
|
109
|
-
constructor() {
|
|
110
|
-
this.server = new
|
|
111
|
-
name: 'git-mcp',
|
|
112
|
-
version: '2.16.0',
|
|
113
|
-
});
|
|
114
|
-
this.setupHandlers();
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Configura os handlers para requests MCP
|
|
118
|
-
*
|
|
119
|
-
* HANDLERS IMPLEMENTADOS:
|
|
120
|
-
* - ListTools: Lista todas as tools disponíveis
|
|
121
|
-
* - CallTool: Executa uma tool específica
|
|
122
|
-
*
|
|
123
|
-
* FLUXO:
|
|
124
|
-
* 1. Validação de parâmetros
|
|
125
|
-
* 2. Busca da tool solicitada
|
|
126
|
-
* 3. Execução com tratamento de erros
|
|
127
|
-
* 4. Retorno de resultado ou erro
|
|
128
|
-
*
|
|
129
|
-
* TRATAMENTO DE ERROS:
|
|
130
|
-
* - Tool não encontrada: erro específico
|
|
131
|
-
* - Erro de execução: captura e formata
|
|
132
|
-
* - Erro de validação: mensagem descritiva
|
|
133
|
-
*/
|
|
134
|
-
setupHandlers() {
|
|
135
|
-
// Handler para listar tools disponíveis
|
|
136
|
-
this.server.setRequestHandler(
|
|
137
|
-
return {
|
|
138
|
-
tools: tools.map(tool => ({
|
|
139
|
-
name: tool.name,
|
|
140
|
-
description: tool.description,
|
|
141
|
-
inputSchema: tool.inputSchema
|
|
142
|
-
}))
|
|
143
|
-
};
|
|
144
|
-
});
|
|
145
|
-
// Handler para executar tools específicas
|
|
146
|
-
this.server.setRequestHandler(
|
|
147
|
-
const { name, arguments: args } = request.params;
|
|
148
|
-
// Busca a tool solicitada
|
|
149
|
-
const tool = tools.find(t => t.name === name);
|
|
150
|
-
if (!tool) {
|
|
151
|
-
throw new Error(`Tool '${name}' not found`);
|
|
152
|
-
}
|
|
153
|
-
try {
|
|
154
|
-
// Executa o handler da tool
|
|
155
|
-
const result = await tool.handler(args || {});
|
|
156
|
-
return {
|
|
157
|
-
content: [
|
|
158
|
-
{
|
|
159
|
-
type: 'text',
|
|
160
|
-
text: JSON.stringify(result, null, 2)
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
167
|
-
return {
|
|
168
|
-
content: [
|
|
169
|
-
{
|
|
170
|
-
type: 'text',
|
|
171
|
-
text: JSON.stringify({
|
|
172
|
-
success: false,
|
|
173
|
-
action: name,
|
|
174
|
-
message: 'Erro na execução da tool',
|
|
175
|
-
error: errorMessage
|
|
176
|
-
}, null, 2)
|
|
177
|
-
}
|
|
178
|
-
],
|
|
179
|
-
isError: true
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Inicializa e executa o servidor MCP
|
|
186
|
-
*
|
|
187
|
-
* FLUXO DE INICIALIZAÇÃO:
|
|
188
|
-
* 1. Validação de configuração
|
|
189
|
-
* 2. Verificação de token obrigatório
|
|
190
|
-
* 3. Conexão com transport stdio
|
|
191
|
-
* 4. Log de status e debug
|
|
192
|
-
*
|
|
193
|
-
* VALIDAÇÕES:
|
|
194
|
-
* - Token de autenticação obrigatório
|
|
195
|
-
* - URL do Gitea válida
|
|
196
|
-
* - Configuração de debug opcional
|
|
197
|
-
*
|
|
198
|
-
* RECOMENDAÇÕES:
|
|
199
|
-
* - Configure DEBUG=true para desenvolvimento
|
|
200
|
-
* - Valide token antes de iniciar
|
|
201
|
-
* - Configure timeout adequado
|
|
202
|
-
*/
|
|
203
|
-
async run() {
|
|
204
|
-
const cfg =
|
|
205
|
-
if (cfg.debug) {
|
|
206
|
-
// Server starting - debug info removed for MCP protocol compliance
|
|
207
|
-
}
|
|
208
|
-
// Inicializar provider factory com configuração
|
|
209
|
-
try {
|
|
210
|
-
console.log('[SERVER] Inicializando provider factory...');
|
|
211
|
-
const factory = (0,
|
|
212
|
-
// Log detalhado dos providers configurados
|
|
213
|
-
try {
|
|
214
|
-
const providersInfo = factory.getProvidersInfo();
|
|
215
|
-
console.log('[SERVER] Providers configurados:');
|
|
216
|
-
providersInfo.forEach(p => {
|
|
217
|
-
console.log(` - ${p.name} (${p.type}) ${p.isDefault ? '[PADRÃO]' : ''}`);
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
catch (infoError) {
|
|
221
|
-
console.log('[SERVER] Não foi possível obter informações detalhadas dos providers');
|
|
222
|
-
}
|
|
223
|
-
// Atualizar o globalProviderFactory com a configuração
|
|
224
|
-
Object.assign(
|
|
225
|
-
console.log('[SERVER] Provider factory inicializado com sucesso');
|
|
226
|
-
}
|
|
227
|
-
catch (error) {
|
|
228
|
-
console.error('[SERVER] Erro ao inicializar providers:', error);
|
|
229
|
-
// Tenta criar um provider fallback se houver falha completa
|
|
230
|
-
try {
|
|
231
|
-
console.log('[SERVER] Tentando criar provider fallback...');
|
|
232
|
-
// Criar provider GitHub básico como fallback
|
|
233
|
-
const fallbackConfig = {
|
|
234
|
-
name: 'github-fallback',
|
|
235
|
-
type: 'github',
|
|
236
|
-
apiUrl: 'https://api.github.com',
|
|
237
|
-
baseUrl: 'https://github.com',
|
|
238
|
-
token: process.env.GITHUB_TOKEN || 'dummy_token',
|
|
239
|
-
username: process.env.GITHUB_USERNAME
|
|
240
|
-
};
|
|
241
|
-
const fallbackProvider =
|
|
242
|
-
|
|
243
|
-
console.log('[SERVER] Provider fallback criado com sucesso');
|
|
244
|
-
}
|
|
245
|
-
catch (fallbackError) {
|
|
246
|
-
console.error('[SERVER] Falha ao criar provider fallback:', fallbackError);
|
|
247
|
-
// Continua sem provider - algumas tools podem não funcionar
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
const transport = new
|
|
251
|
-
await this.server.connect(transport);
|
|
252
|
-
if (cfg.debug) {
|
|
253
|
-
// Server connected and ready
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Fecha o servidor MCP graciosamente
|
|
258
|
-
*
|
|
259
|
-
* USO:
|
|
260
|
-
* - Durante shutdown da aplicação
|
|
261
|
-
* - Para limpeza de recursos
|
|
262
|
-
* - Para finalização controlada
|
|
263
|
-
*
|
|
264
|
-
* RECOMENDAÇÕES:
|
|
265
|
-
* - Sempre chame antes de sair
|
|
266
|
-
* - Aguarde a conclusão da operação
|
|
267
|
-
* - Trate erros de fechamento
|
|
268
|
-
*/
|
|
269
|
-
async close() {
|
|
270
|
-
await this.server.close();
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
exports.GiteaMCPServer = GiteaMCPServer;
|
|
274
|
-
/**
|
|
275
|
-
* Handlers para sinais do sistema
|
|
276
|
-
*
|
|
277
|
-
* SINAIS TRATADOS:
|
|
278
|
-
* - SIGINT: Interrupção do usuário (Ctrl+C)
|
|
279
|
-
* - unhandledRejection: Promises rejeitadas
|
|
280
|
-
* - uncaughtException: Exceções não tratadas
|
|
281
|
-
*
|
|
282
|
-
* COMPORTAMENTO:
|
|
283
|
-
* - SIGINT: Shutdown gracioso
|
|
284
|
-
* - Erros não tratados: Exit com código 1
|
|
285
|
-
* - Log de erro antes de sair
|
|
286
|
-
*
|
|
287
|
-
* RECOMENDAÇÕES:
|
|
288
|
-
* - Implemente graceful shutdown
|
|
289
|
-
* - Log todos os erros fatais
|
|
290
|
-
* - Use códigos de saída apropriados
|
|
291
|
-
*/
|
|
292
|
-
// Handler para interrupção do usuário (Ctrl+C)
|
|
293
|
-
process.on('SIGINT', async () => {
|
|
294
|
-
// Shutting down server
|
|
295
|
-
process.exit(0);
|
|
296
|
-
});
|
|
297
|
-
// Handler para promises rejeitadas não tratadas
|
|
298
|
-
process.on('unhandledRejection', (reason, promise) => {
|
|
299
|
-
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
300
|
-
process.exit(1);
|
|
301
|
-
});
|
|
302
|
-
// Handler para exceções não tratadas
|
|
303
|
-
process.on('uncaughtException', (error) => {
|
|
304
|
-
console.error('Uncaught Exception:', error);
|
|
305
|
-
process.exit(1);
|
|
306
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GiteaMCPServer = void 0;
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
+
const config_js_1 = require("./config.js");
|
|
8
|
+
const index_js_2 = require("./providers/index.js");
|
|
9
|
+
/**
|
|
10
|
+
* Importação de todas as ferramentas MCP disponíveis (18 tools)
|
|
11
|
+
*
|
|
12
|
+
* GIT CORE (18 tools) - Funcionam com GitHub + Gitea:
|
|
13
|
+
* - git-repositories: Gerenciamento de repositórios
|
|
14
|
+
* - git-commits: Operações com commits
|
|
15
|
+
* - git-branches: Operações com branches
|
|
16
|
+
* - git-tags: Gerenciamento de tags
|
|
17
|
+
* - git-files: Gerenciamento de arquivos
|
|
18
|
+
* - git-upload-project: Upload completo de projeto
|
|
19
|
+
* - git-initialize: Inicialização completa de repositório
|
|
20
|
+
* - git-issues: Gerenciamento de issues
|
|
21
|
+
* - git-pulls: Pull requests e merges
|
|
22
|
+
* - git-releases: Gerenciamento de releases
|
|
23
|
+
* - git-webhooks: Gerenciamento de webhooks
|
|
24
|
+
* - git-reset: Operações de reset
|
|
25
|
+
* - git-revert: Operações de revert
|
|
26
|
+
* - git-stash: Gerenciamento de stash
|
|
27
|
+
* - git-config: Configuração do Git
|
|
28
|
+
* - git-remote: Gerenciamento de remotes
|
|
29
|
+
* - git-archive: Criação de arquivos
|
|
30
|
+
* - git-sync: Sincronização de repositórios
|
|
31
|
+
*/
|
|
32
|
+
// Git Core Tools (18)
|
|
33
|
+
const git_repositories_js_1 = require("./tools/git-repositories.js");
|
|
34
|
+
const git_commits_js_1 = require("./tools/git-commits.js");
|
|
35
|
+
const git_branches_js_1 = require("./tools/git-branches.js");
|
|
36
|
+
const git_tags_js_1 = require("./tools/git-tags.js");
|
|
37
|
+
const git_files_js_1 = require("./tools/git-files.js");
|
|
38
|
+
const git_upload_project_js_1 = require("./tools/git-upload-project.js");
|
|
39
|
+
const git_initialize_js_1 = require("./tools/git-initialize.js");
|
|
40
|
+
const git_issues_js_1 = require("./tools/git-issues.js");
|
|
41
|
+
const git_pulls_js_1 = require("./tools/git-pulls.js");
|
|
42
|
+
const git_releases_js_1 = require("./tools/git-releases.js");
|
|
43
|
+
// import { webhooksTool } from './tools/git-webhooks.js';
|
|
44
|
+
const git_reset_js_1 = require("./tools/git-reset.js");
|
|
45
|
+
const git_revert_js_1 = require("./tools/git-revert.js");
|
|
46
|
+
const git_stash_js_1 = require("./tools/git-stash.js");
|
|
47
|
+
const git_config_js_1 = require("./tools/git-config.js");
|
|
48
|
+
const git_remote_js_1 = require("./tools/git-remote.js");
|
|
49
|
+
const git_archive_js_1 = require("./tools/git-archive.js");
|
|
50
|
+
const git_sync_js_1 = require("./tools/git-sync.js");
|
|
51
|
+
/**
|
|
52
|
+
* Array de todas as ferramentas disponíveis (18 tools)
|
|
53
|
+
*
|
|
54
|
+
* ESTRUTURA:
|
|
55
|
+
* - Cada tool deve implementar a interface Tool
|
|
56
|
+
* - Nome, descrição e schema são obrigatórios
|
|
57
|
+
* - Handler deve ser assíncrono e retornar resultado
|
|
58
|
+
*
|
|
59
|
+
* ORGANIZAÇÃO:
|
|
60
|
+
* - Git Core (18): Funcionam com GitHub + Gitea
|
|
61
|
+
*
|
|
62
|
+
* USO:
|
|
63
|
+
* - Para listagem de tools disponíveis
|
|
64
|
+
* - Para execução de tools específicas
|
|
65
|
+
* - Para validação de parâmetros
|
|
66
|
+
*/
|
|
67
|
+
const tools = [
|
|
68
|
+
// Git Core Tools (18) - GitHub + Gitea
|
|
69
|
+
git_repositories_js_1.gitRepositoriesTool,
|
|
70
|
+
git_commits_js_1.commitsTool,
|
|
71
|
+
git_branches_js_1.branchesTool,
|
|
72
|
+
git_tags_js_1.tagsTool,
|
|
73
|
+
git_files_js_1.filesTool,
|
|
74
|
+
git_upload_project_js_1.uploadProjectTool,
|
|
75
|
+
git_initialize_js_1.initializeTool,
|
|
76
|
+
git_issues_js_1.issuesTool,
|
|
77
|
+
git_pulls_js_1.pullsTool,
|
|
78
|
+
git_releases_js_1.releasesTool,
|
|
79
|
+
// webhooksTool,
|
|
80
|
+
git_reset_js_1.gitResetTool,
|
|
81
|
+
git_revert_js_1.gitRevertTool,
|
|
82
|
+
git_stash_js_1.gitStashTool,
|
|
83
|
+
git_config_js_1.gitConfigTool,
|
|
84
|
+
git_remote_js_1.gitRemoteTool,
|
|
85
|
+
git_archive_js_1.gitArchiveTool,
|
|
86
|
+
git_sync_js_1.gitSyncTool
|
|
87
|
+
];
|
|
88
|
+
/**
|
|
89
|
+
* Servidor MCP principal para Gitea
|
|
90
|
+
*
|
|
91
|
+
* RESPONSABILIDADES:
|
|
92
|
+
* - Inicializar servidor MCP
|
|
93
|
+
* - Registrar handlers para requests
|
|
94
|
+
* - Gerenciar ciclo de vida das tools
|
|
95
|
+
* - Tratar erros e validações
|
|
96
|
+
*
|
|
97
|
+
* ARQUITETURA:
|
|
98
|
+
* - Server MCP padrão com transport stdio
|
|
99
|
+
* - Handlers para list e call de tools
|
|
100
|
+
* - Tratamento centralizado de erros
|
|
101
|
+
*
|
|
102
|
+
* RECOMENDAÇÕES:
|
|
103
|
+
* - Use apenas uma instância por processo
|
|
104
|
+
* - Configure handlers antes de conectar
|
|
105
|
+
* - Implemente graceful shutdown
|
|
106
|
+
*/
|
|
107
|
+
class GiteaMCPServer {
|
|
108
|
+
server;
|
|
109
|
+
constructor() {
|
|
110
|
+
this.server = new index_js_1.Server({
|
|
111
|
+
name: 'git-mcp',
|
|
112
|
+
version: '2.16.0',
|
|
113
|
+
});
|
|
114
|
+
this.setupHandlers();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Configura os handlers para requests MCP
|
|
118
|
+
*
|
|
119
|
+
* HANDLERS IMPLEMENTADOS:
|
|
120
|
+
* - ListTools: Lista todas as tools disponíveis
|
|
121
|
+
* - CallTool: Executa uma tool específica
|
|
122
|
+
*
|
|
123
|
+
* FLUXO:
|
|
124
|
+
* 1. Validação de parâmetros
|
|
125
|
+
* 2. Busca da tool solicitada
|
|
126
|
+
* 3. Execução com tratamento de erros
|
|
127
|
+
* 4. Retorno de resultado ou erro
|
|
128
|
+
*
|
|
129
|
+
* TRATAMENTO DE ERROS:
|
|
130
|
+
* - Tool não encontrada: erro específico
|
|
131
|
+
* - Erro de execução: captura e formata
|
|
132
|
+
* - Erro de validação: mensagem descritiva
|
|
133
|
+
*/
|
|
134
|
+
setupHandlers() {
|
|
135
|
+
// Handler para listar tools disponíveis
|
|
136
|
+
this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
137
|
+
return {
|
|
138
|
+
tools: tools.map(tool => ({
|
|
139
|
+
name: tool.name,
|
|
140
|
+
description: tool.description,
|
|
141
|
+
inputSchema: tool.inputSchema
|
|
142
|
+
}))
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
// Handler para executar tools específicas
|
|
146
|
+
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
147
|
+
const { name, arguments: args } = request.params;
|
|
148
|
+
// Busca a tool solicitada
|
|
149
|
+
const tool = tools.find(t => t.name === name);
|
|
150
|
+
if (!tool) {
|
|
151
|
+
throw new Error(`Tool '${name}' not found`);
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
// Executa o handler da tool
|
|
155
|
+
const result = await tool.handler(args || {});
|
|
156
|
+
return {
|
|
157
|
+
content: [
|
|
158
|
+
{
|
|
159
|
+
type: 'text',
|
|
160
|
+
text: JSON.stringify(result, null, 2)
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
167
|
+
return {
|
|
168
|
+
content: [
|
|
169
|
+
{
|
|
170
|
+
type: 'text',
|
|
171
|
+
text: JSON.stringify({
|
|
172
|
+
success: false,
|
|
173
|
+
action: name,
|
|
174
|
+
message: 'Erro na execução da tool',
|
|
175
|
+
error: errorMessage
|
|
176
|
+
}, null, 2)
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
isError: true
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Inicializa e executa o servidor MCP
|
|
186
|
+
*
|
|
187
|
+
* FLUXO DE INICIALIZAÇÃO:
|
|
188
|
+
* 1. Validação de configuração
|
|
189
|
+
* 2. Verificação de token obrigatório
|
|
190
|
+
* 3. Conexão com transport stdio
|
|
191
|
+
* 4. Log de status e debug
|
|
192
|
+
*
|
|
193
|
+
* VALIDAÇÕES:
|
|
194
|
+
* - Token de autenticação obrigatório
|
|
195
|
+
* - URL do Gitea válida
|
|
196
|
+
* - Configuração de debug opcional
|
|
197
|
+
*
|
|
198
|
+
* RECOMENDAÇÕES:
|
|
199
|
+
* - Configure DEBUG=true para desenvolvimento
|
|
200
|
+
* - Valide token antes de iniciar
|
|
201
|
+
* - Configure timeout adequado
|
|
202
|
+
*/
|
|
203
|
+
async run() {
|
|
204
|
+
const cfg = config_js_1.config.getConfig();
|
|
205
|
+
if (cfg.debug) {
|
|
206
|
+
// Server starting - debug info removed for MCP protocol compliance
|
|
207
|
+
}
|
|
208
|
+
// Inicializar provider factory com configuração
|
|
209
|
+
try {
|
|
210
|
+
console.log('[SERVER] Inicializando provider factory...');
|
|
211
|
+
const factory = (0, index_js_2.initializeFactoryFromEnv)();
|
|
212
|
+
// Log detalhado dos providers configurados
|
|
213
|
+
try {
|
|
214
|
+
const providersInfo = factory.getProvidersInfo();
|
|
215
|
+
console.log('[SERVER] Providers configurados:');
|
|
216
|
+
providersInfo.forEach(p => {
|
|
217
|
+
console.log(` - ${p.name} (${p.type}) ${p.isDefault ? '[PADRÃO]' : ''}`);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
catch (infoError) {
|
|
221
|
+
console.log('[SERVER] Não foi possível obter informações detalhadas dos providers');
|
|
222
|
+
}
|
|
223
|
+
// Atualizar o globalProviderFactory com a configuração
|
|
224
|
+
Object.assign(index_js_2.globalProviderFactory, factory);
|
|
225
|
+
console.log('[SERVER] Provider factory inicializado com sucesso');
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
console.error('[SERVER] Erro ao inicializar providers:', error);
|
|
229
|
+
// Tenta criar um provider fallback se houver falha completa
|
|
230
|
+
try {
|
|
231
|
+
console.log('[SERVER] Tentando criar provider fallback...');
|
|
232
|
+
// Criar provider GitHub básico como fallback
|
|
233
|
+
const fallbackConfig = {
|
|
234
|
+
name: 'github-fallback',
|
|
235
|
+
type: 'github',
|
|
236
|
+
apiUrl: 'https://api.github.com',
|
|
237
|
+
baseUrl: 'https://github.com',
|
|
238
|
+
token: process.env.GITHUB_TOKEN || 'dummy_token',
|
|
239
|
+
username: process.env.GITHUB_USERNAME
|
|
240
|
+
};
|
|
241
|
+
const fallbackProvider = index_js_2.globalProviderFactory.createProvider(fallbackConfig);
|
|
242
|
+
index_js_2.globalProviderFactory.setDefaultProvider('github-fallback');
|
|
243
|
+
console.log('[SERVER] Provider fallback criado com sucesso');
|
|
244
|
+
}
|
|
245
|
+
catch (fallbackError) {
|
|
246
|
+
console.error('[SERVER] Falha ao criar provider fallback:', fallbackError);
|
|
247
|
+
// Continua sem provider - algumas tools podem não funcionar
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
251
|
+
await this.server.connect(transport);
|
|
252
|
+
if (cfg.debug) {
|
|
253
|
+
// Server connected and ready
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Fecha o servidor MCP graciosamente
|
|
258
|
+
*
|
|
259
|
+
* USO:
|
|
260
|
+
* - Durante shutdown da aplicação
|
|
261
|
+
* - Para limpeza de recursos
|
|
262
|
+
* - Para finalização controlada
|
|
263
|
+
*
|
|
264
|
+
* RECOMENDAÇÕES:
|
|
265
|
+
* - Sempre chame antes de sair
|
|
266
|
+
* - Aguarde a conclusão da operação
|
|
267
|
+
* - Trate erros de fechamento
|
|
268
|
+
*/
|
|
269
|
+
async close() {
|
|
270
|
+
await this.server.close();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
exports.GiteaMCPServer = GiteaMCPServer;
|
|
274
|
+
/**
|
|
275
|
+
* Handlers para sinais do sistema
|
|
276
|
+
*
|
|
277
|
+
* SINAIS TRATADOS:
|
|
278
|
+
* - SIGINT: Interrupção do usuário (Ctrl+C)
|
|
279
|
+
* - unhandledRejection: Promises rejeitadas
|
|
280
|
+
* - uncaughtException: Exceções não tratadas
|
|
281
|
+
*
|
|
282
|
+
* COMPORTAMENTO:
|
|
283
|
+
* - SIGINT: Shutdown gracioso
|
|
284
|
+
* - Erros não tratados: Exit com código 1
|
|
285
|
+
* - Log de erro antes de sair
|
|
286
|
+
*
|
|
287
|
+
* RECOMENDAÇÕES:
|
|
288
|
+
* - Implemente graceful shutdown
|
|
289
|
+
* - Log todos os erros fatais
|
|
290
|
+
* - Use códigos de saída apropriados
|
|
291
|
+
*/
|
|
292
|
+
// Handler para interrupção do usuário (Ctrl+C)
|
|
293
|
+
process.on('SIGINT', async () => {
|
|
294
|
+
// Shutting down server
|
|
295
|
+
process.exit(0);
|
|
296
|
+
});
|
|
297
|
+
// Handler para promises rejeitadas não tratadas
|
|
298
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
299
|
+
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
300
|
+
process.exit(1);
|
|
301
|
+
});
|
|
302
|
+
// Handler para exceções não tratadas
|
|
303
|
+
process.on('uncaughtException', (error) => {
|
|
304
|
+
console.error('Uncaught Exception:', error);
|
|
305
|
+
process.exit(1);
|
|
306
|
+
});
|
|
307
307
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,iEAAmG;AACnG,2CAAqC;AACrC,mDAAuF;AAEvF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,sBAAsB;AACtB,qEAAkE;AAClE,2DAAqD;AACrD,6DAAuD;AACvD,qDAA+C;AAC/C,uDAAiD;AACjD,yEAAkE;AAClE,iEAA2D;AAC3D,yDAAmD;AACnD,uDAAiD;AACjD,6DAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|