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.
get_user
Fetches information about a GitHub user.
get_repos
Lists repositories of a user.
get_issues
Lists issues of a repository.
get_pull_requests
Lists pull requests of a repository.
get_commits
Lists commits of a repository.
get_content
Fetches content of a file in a repository.
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.