andradeandrey/localmcp
If you are the rightful owner of localmcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This is an MCP (Model Context Protocol) server that integrates with the GitHub API, enabling AI assistants to interact with repositories, issues, pull requests, and other GitHub resources.
Servidor MCP GitHub
Este é um servidor MCP (Model Context Protocol) que se integra com a API do GitHub, permitindo que assistentes de IA interajam com repositórios, issues, pull requests e outros recursos do GitHub.
Configuração
1. Instalar Go
Certifique-se de ter Go instalado (versão 1.19 ou superior):
go version
2. Token do GitHub
- Acesse GitHub Personal Access Tokens
- Clique em "Generate new token (classic)"
- Selecione as seguintes permissões:
repo
(acesso total aos repositórios)user
(acesso ao perfil do usuário)read:org
(se precisar acessar organizações)
- Copie o token gerado
3. Configurar variável de ambiente
export GITHUB_TOKEN="seu_token_aqui"
4. Compilar e executar
go build -o mcp-github-server main.go
./mcp-github-server
Funcionalidades
O servidor MCP fornece as seguintes ferramentas:
1. get_user
Obter informações de um usuário GitHub.
Parâmetros:
username
(opcional): Nome do usuário. Se não fornecido, retorna info do usuário autenticado.
Exemplo de uso:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_user",
"arguments": {
"username": "octocat"
}
}
}
2. get_repos
Listar repositórios de um usuário.
Parâmetros:
username
(opcional): Nome do usuário. Se não fornecido, lista repos do usuário autenticado.
3. get_issues
Listar issues de um repositório.
Parâmetros:
owner
(obrigatório): Proprietário do repositóriorepo
(obrigatório): Nome do repositório
4. get_pull_requests
Listar pull requests de um repositório.
Parâmetros:
owner
(obrigatório): Proprietário do repositóriorepo
(obrigatório): Nome do repositório
5. get_commits
Listar commits de um repositório.
Parâmetros:
owner
(obrigatório): Proprietário do repositóriorepo
(obrigatório): Nome do repositório
6. get_content
Obter conteúdo de um arquivo no repositório.
Parâmetros:
owner
(obrigatório): Proprietário do repositóriorepo
(obrigatório): Nome do repositóriopath
(obrigatório): Caminho do arquivo
Protocolo MCP
O servidor implementa o protocolo MCP versão 2024-11-05. Ele se comunica através de stdin/stdout usando mensagens JSON-RPC.
Mensagens suportadas:
- initialize: Inicializa o servidor
- tools/list: Lista todas as ferramentas disponíveis
- tools/call: Executa uma ferramenta específica
- ping: Verifica se o servidor está ativo
Exemplo de inicialização:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "test-client",
"version": "1.0.0"
}
}
}
Integração com Claude Desktop
Para usar este servidor com Claude Desktop, adicione a seguinte configuração ao seu arquivo de configuração:
{
"mcpServers": {
"github": {
"command": "./mcp-github-server",
"env": {
"GITHUB_TOKEN": "seu_token_aqui"
}
}
}
}
Arquivo Makefile
Crie um Makefile
para facilitar o build e execução:
# Makefile para o servidor MCP GitHub
.PHONY: build run clean test
# Variáveis
BINARY_NAME=mcp-github-server
MAIN_FILE=main.go
# Build do projeto
build:
go build -o $(BINARY_NAME) $(MAIN_FILE)
# Executar o servidor
run: build
./$(BINARY_NAME)
# Executar com verificação de token
run-check: build
@if [ -z "$(GITHUB_TOKEN)" ]; then \
echo "Erro: GITHUB_TOKEN não definido"; \
echo "Execute: export GITHUB_TOKEN='seu_token_aqui'"; \
exit 1; \
fi
./$(BINARY_NAME)
# Limpar arquivos compilados
clean:
rm -f $(BINARY_NAME)
# Testar o servidor
test:
go test -v ./...
# Instalar dependências (se houver)
deps:
go mod tidy
# Verificar formatação
fmt:
go fmt ./...
# Verificar código
vet:
go vet ./...
# Build para diferentes plataformas
build-all:
GOOS=linux GOARCH=amd64 go build -o $(BINARY_NAME)-linux-amd64 $(MAIN_FILE)
GOOS=windows GOARCH=amd64 go build -o $(BINARY_NAME)-windows-amd64.exe $(MAIN_FILE)
GOOS=darwin GOARCH=amd64 go build -o $(BINARY_NAME)-darwin-amd64 $(MAIN_FILE)
GOOS=darwin GOARCH=arm64 go build -o $(BINARY_NAME)-darwin-arm64 $(MAIN_FILE)
Script de Teste
Crie um script para testar o servidor:
#!/bin/bash
# test-server.sh
# Verificar se o token está definido
if [ -z "$GITHUB_TOKEN" ]; then
echo "Erro: GITHUB_TOKEN não definido"
echo "Execute: export GITHUB_TOKEN='seu_token_aqui'"
exit 1
fi
# Compilar o servidor
echo "Compilando servidor..."
go build -o mcp-github-server main.go
# Iniciar o servidor em background
echo "Iniciando servidor..."
./mcp-github-server &
SERVER_PID=$!
# Aguardar um pouco para o servidor iniciar
sleep 2
# Testar inicialização
echo "Testando inicialização..."
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0.0"}}}' | ./mcp-github-server
# Testar ping
echo "Testando ping..."
echo '{"jsonrpc":"2.0","id":2,"method":"ping","params":{}}' | ./mcp-github-server
# Testar lista de ferramentas
echo "Testando lista de ferramentas..."
echo '{"jsonrpc":"2.0","id":3,"method":"tools/list","params":{}}' | ./mcp-github-server
# Finalizar servidor
kill $SERVER_PID
echo "Teste concluído!"
Exemplo de Uso Completo
Aqui está um exemplo completo de como usar o servidor:
# 1. Definir token
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Compilar
go build -o mcp-github-server main.go
# 3. Executar
./mcp-github-server
Então, em outro terminal, você pode enviar comandos:
# Inicializar
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' | ./mcp-github-server
# Listar ferramentas
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | ./mcp-github-server
# Obter informações do usuário
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_user","arguments":{"username":"octocat"}}}' | ./mcp-github-server
# Listar repositórios
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_repos","arguments":{"username":"octocat"}}}' | ./mcp-github-server
# Listar issues de um repositório
echo '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"get_issues","arguments":{"owner":"facebook","repo":"react"}}}' | ./mcp-github-server
Recursos Avançados
Autenticação
O servidor usa tokens de acesso pessoal do GitHub para autenticação. Certifique-se de que o token tenha as permissões necessárias para acessar os recursos desejados.
Rate Limiting
O servidor respeita os limites de taxa da API do GitHub. Se você encontrar erros de limite de taxa, aguarde antes de fazer mais solicitações.
Tratamento de Erros
O servidor inclui tratamento robusto de erros, retornando códigos de erro JSON-RPC apropriados quando algo dá errado.
Extensibilidade
O código foi estruturado para facilitar a adição de novas funcionalidades. Você pode adicionar novos métodos à API do GitHub modificando:
- Adicionar nova estrutura de dados (se necessário)
- Implementar método no
GitHubClient
- Adicionar nova ferramenta ao array
tools
- Implementar handler no
MCPServer
Estrutura do Projeto
mcp-github-server/
├── main.go # Código principal
├── Makefile # Automação de build
├── test-server.sh # Script de teste
├── README.md # Documentação
└── go.mod # Módulo Go (se necessário)
Solução de Problemas
Token inválido
- Verifique se o token está correto
- Confirme que o token tem as permissões necessárias
- Teste o token manualmente com curl
Servidor não responde
- Verifique se o servidor está rodando
- Confirme que as mensagens JSON estão bem formadas
- Verifique os logs de erro
Erro de API
- Verifique se o repositório/usuário existe
- Confirme que você tem acesso ao recurso solicitado
- Verifique limites de taxa da API
Licença
Este projeto é fornecido como exemplo educacional. Use sob sua própria responsabilidade.