greptile-mcp

Integrations

  • Provides enhanced query and search capabilities for code repositories when the 'genius' parameter is enabled, offering improved contextual understanding

  • Allows accessing and indexing GitHub repositories for code search and querying, supporting both public and private repositories with appropriate authentication

  • Enables indexing and searching GitLab repositories, providing code search capabilities and repository information retrieval with proper authentication

Servidor MCP de Greptile [COMPLETO]

Hoja de trucos del comando de ejecución rápida

✅ ESTADO DEL PROYECTO: TODAS LAS TAREAS COMPLETADAS (11/11)

Consulte PROJECT_COMPLETION.md para obtener un resumen del trabajo completado y USER_GUIDE.md para obtener instrucciones de uso.

AmbienteConfiguración e instalaciónComando Ejecutar
Local (Python)python -m venv .venv && source .venv/bin/activate && pip install -e .python -m src.main
Estibadordocker build -t greptile-mcp .docker run --rm --env-file .env -p 8050:8050 greptile-mcp
Herreríanpm install -g smitherysmithery deploy (ver smithery.yaml)

Complete .env usando .env.example y configure su GREPTILE_API_KEY y GITHUB_TOKEN antes de ejecutar.

Para conocer los requisitos previos completos, el uso avanzado del agente, la integración y la resolución de problemas: consulte la documentación completa en docs/README.md y los detalles del agente en AGENT_USAGE.md .


Una implementación de servidor MCP (Protocolo de contexto de modelo) que se integra con la API de Greptile para proporcionar capacidades de búsqueda y consulta de código a agentes de IA.

Características

El servidor proporciona cuatro herramientas Greptile esenciales que permiten a los agentes de IA interactuar con las bases de código:

  1. index_repository : Indexa un repositorio para búsqueda y consulta de código.
    • Procesar un repositorio para que se pueda buscar
    • Actualizar los índices existentes cuando cambian los repositorios
    • Configurar las preferencias de notificación
  2. query_repository : consulta repositorios para obtener respuestas con referencias de código.
    • Haga preguntas en lenguaje natural sobre el código base
    • Obtenga respuestas detalladas que hagan referencia a ubicaciones de códigos específicos
    • Compatibilidad con el historial de conversaciones con identificadores de sesión
  3. search_repository : busca repositorios de archivos relevantes sin generar una respuesta completa.
    • Encuentre archivos relacionados con conceptos o características específicos
    • Obtenga coincidencias contextuales clasificadas por relevancia
    • Más rápido que las consultas completas cuando solo se necesitan ubicaciones de archivos
  4. get_repository_info : obtiene información sobre un repositorio indexado.
    • Comprobar el estado y el progreso de la indexación
    • Verificar qué repositorios están disponibles para realizar consultas
    • Obtener metadatos sobre repositorios indexados

Despliegue de herrería

El servidor Greptile MCP admite la implementación mediante Smithery. El archivo de configuración smithery.yaml se incluye en la raíz del proyecto.

Configuración de herrería

La configuración de Smithery se define en smithery.yaml y admite las siguientes opciones:

build: dockerfile: Dockerfile startCommand: type: stdio configSchema: type: object required: - greptileApiKey - githubToken properties: greptileApiKey: type: string description: "API key for accessing the Greptile API" githubToken: type: string description: "GitHub Personal Access Token for repository access" baseUrl: type: string description: "Base URL for Greptile API" default: "https://api.greptile.com/v2" host: type: string description: "Host to bind to when using SSE transport" default: "0.0.0.0" port: type: string description: "Port to listen on when using SSE transport" default: "8050"

Uso con herrería

Para implementar usando Smithery:

  1. Instalar Smithery: npm install -g smithery
  2. Implementar el servidor: smithery deploy
  3. Configure su cliente Smithery con las claves API necesarias

Documentación adicional

Para obtener instrucciones de uso detalladas de los agentes de IA, consulte la Guía de uso de agentes .

Prerrequisitos

  • Python 3.12+
  • Clave API de Greptile (desde https://app.greptile.com/settings/api )
  • Token de acceso personal (PAT) de GitHub o GitLab con permisos repo (o lectura equivalente) para los repositorios que desea indexar
  • Docker (recomendado para implementación)

Paquetes de Python necesarios

  • fastmcp - Implementación del servidor MCP
  • httpx - Cliente HTTP asíncrono
  • python-dotenv - Gestión de variables de entorno
  • uvicorn - Servidor ASGI para transporte SSE

Instalación

Usando pip (para desarrollo o pruebas locales)

  1. Clonar este repositorio:
    git clone https://github.com/sosacrazy126/greptile-mcp.git cd greptile-mcp
  2. Crear un entorno virtual (recomendado):
    python -m venv .venv source .venv/bin/activate # On Windows use `.venv\Scripts\activate`
  3. Instalar dependencias:
    pip install -e .
  4. Cree un archivo .env basado en .env.example :
    cp .env.example .env
  5. Configure sus variables de entorno en el archivo .env :
    GREPTILE_API_KEY=your_api_key_here GITHUB_TOKEN=your_github_token_here

Uso de Docker (recomendado para la implementación)

  1. Clonar el repositorio:
    git clone https://github.com/sosacrazy126/greptile-mcp.git cd greptile-mcp
  2. Cree un archivo .env basado en .env.example y configure sus variables de entorno.
  3. Construya la imagen de Docker:
    docker build -t greptile-mcp .

Ejecución del servidor

Usando pip

Transporte SSE (predeterminado)

Asegúrese de que TRANSPORT=sse y PORT=8050 (o el puerto elegido) estén configurados en su archivo .env .

python -m src.main

El servidor escuchará en http://<HOST>:<PORT>/sse .

Transporte de Studio

Establezca TRANSPORT=stdio en su archivo .env . Con stdio, el cliente MCP normalmente inicia el proceso del servidor MCP.

# Usually invoked by an MCP client, not directly TRANSPORT=stdio python -m src.main

Usando Docker

Transporte SSE (predeterminado)
# Mounts the .env file for configuration and maps the port docker run --rm --env-file .env -p 8050:8050 greptile-mcp

El servidor escuchará en http://localhost:8050/sse (o la IP del host si no es localhost).

Transporte de Studio

Configure su cliente MCP para ejecutar el contenedor Docker con TRANSPORT=stdio .

# Example of running with stdio transport docker run --rm -i --env-file .env -e TRANSPORT=stdio greptile-mcp

Integración con clientes MCP

Ejemplo de configuración de SSE

Agregue esto a la configuración de su cliente MCP (por ejemplo, mcp_config.json ):

{ "mcpServers": { "greptile": { "transport": "sse", "url": "http://localhost:8050/sse" } } }

Ejemplo de configuración de Python con Stdio

Asegúrese de que TRANSPORT=stdio esté configurado en el entorno donde se ejecuta el comando:

{ "mcpServers": { "greptile": { "transport": "stdio", "command": "/path/to/your/greptile-mcp/.venv/bin/python", "args": ["-m", "src.main"], "env": { "TRANSPORT": "stdio", "GREPTILE_API_KEY": "YOUR-GREPTILE-API-KEY", "GITHUB_TOKEN": "YOUR-GITHUB-TOKEN", "GREPTILE_BASE_URL": "https://api.greptile.com/v2" } } } }

Ejemplo de configuración de Docker con Stdio

{ "mcpServers": { "greptile": { "transport": "stdio", "command": "docker", "args": [ "run", "--rm", "-i", "-e", "TRANSPORT=stdio", "-e", "GREPTILE_API_KEY", "-e", "GITHUB_TOKEN", "-e", "GREPTILE_BASE_URL", "greptile-mcp" ], "env": { "GREPTILE_API_KEY": "YOUR-GREPTILE-API-KEY", "GITHUB_TOKEN": "YOUR-GITHUB-TOKEN", "GREPTILE_BASE_URL": "https://api.greptile.com/v2" } } } }

Guía de uso detallada

Flujo de trabajo para el análisis de código base

  1. Repositorios de índices que desea analizar utilizando index_repository
  2. Verifique el estado de indexación con get_repository_info para garantizar que el procesamiento esté completo
  3. Consulta los repositorios usando lenguaje natural con query_repository
  4. Encuentre archivos específicos relacionados con características o conceptos usando search_repository

Gestión de sesiones para el contexto de conversación

Al interactuar con el servidor Greptile MCP a través de cualquier cliente (incluido Smithery), la gestión adecuada de la sesión es crucial para mantener el contexto de la conversación:

  1. Generar un ID de sesión único al comienzo de una conversación
  2. Reutilice el mismo ID de sesión para todas las consultas de seguimiento relacionadas
  3. Crear un nuevo ID de sesión al iniciar una nueva conversación

Ejemplo de gestión de ID de sesión:

# Generate a unique session ID import uuid session_id = str(uuid.uuid4()) # Initial query initial_response = query_repository( query="How is authentication implemented?", repositories=[{"remote": "github", "repository": "owner/repo", "branch": "main"}], session_id=session_id # Include the session ID ) # Follow-up query using the SAME session ID followup_response = query_repository( query="Can you provide more details about the JWT verification?", repositories=[{"remote": "github", "repository": "owner/repo", "branch": "main"}], session_id=session_id # Reuse the same session ID )

Importante para la integración de Smithery : Los agentes que se conectan a través de Smithery deben generar y mantener sus propios ID de sesión. El servidor MCP de Greptile no genera ID de sesión automáticamente. El ID de sesión debe formar parte del estado de conversación del agente.

Mejores prácticas

  • Rendimiento de indexación : Los repositorios pequeños indexan más rápido. Para repositorios mono grandes, considere indexar ramas o etiquetas específicas.
  • Optimización de consultas : Sea específico en sus consultas. Incluya términos técnicos relevantes para obtener mejores resultados.
  • Selección de repositorio : al consultar varios repositorios, enumérelos en orden de relevancia para obtener los mejores resultados.
  • Gestión de sesiones : utilice identificadores de sesión para preguntas de seguimiento a fin de mantener el contexto en todas las consultas.

Referencia de API

1. Repositorio de índices

Indexa un repositorio para que pueda buscarse en futuras consultas.

Parámetros:

  • remote (cadena): el host del repositorio, ya sea "github" o "gitlab"
  • repository (cadena): El repositorio en formato propietario/repositorio (por ejemplo, "greptileai/greptile")
  • branch (cadena): La rama a indexar (por ejemplo, "principal")
  • reload (booleano, opcional): si se debe forzar el reprocesamiento de un repositorio previamente indexado
  • notify (booleano, opcional): si se debe enviar una notificación por correo electrónico cuando se complete la indexación

Ejemplo:

// Tool Call: index_repository { "remote": "github", "repository": "greptileai/greptile", "branch": "main", "reload": false, "notify": false }

Respuesta:

{ "message": "Indexing Job Submitted for: greptileai/greptile", "statusEndpoint": "https://api.greptile.com/v2/repositories/github:main:greptileai%2Fgreptile" }

2. Repositorio de consultas

Consulta repositorios con lenguaje natural para obtener respuestas con referencias de código.

Parámetros:

  • query (cadena): La consulta en lenguaje natural sobre el código base
  • repositories (matriz): Lista de repositorios para consultar, cada uno con el formato:
    { "remote": "github", "repository": "owner/repo", "branch": "main" }
  • session_id (cadena, opcional): ID de sesión para continuar una conversación
  • stream (booleano, opcional): si se debe transmitir la respuesta
  • genius (booleano, opcional): si se deben utilizar capacidades de consulta mejoradas

Ejemplo:

// Tool Call: query_repository { "query": "How is authentication handled in this codebase?", "repositories": [ { "remote": "github", "repository": "greptileai/greptile", "branch": "main" } ], "session_id": null, "stream": false, "genius": true }

Respuesta:

{ "message": "Authentication in this codebase is handled using JWT tokens...", "sources": [ { "repository": "greptileai/greptile", "remote": "github", "branch": "main", "filepath": "/src/auth/jwt.js", "linestart": 14, "lineend": 35, "summary": "JWT token validation middleware" } ] }

3. Buscar en el repositorio

Busca repositorios para encontrar archivos relevantes sin generar una respuesta completa.

Parámetros:

  • query (cadena): La consulta de búsqueda sobre el código base
  • repositories (matriz): Lista de repositorios para buscar
  • session_id (cadena, opcional): ID de sesión para continuar una conversación
  • genius (booleano, opcional): si se deben utilizar capacidades de búsqueda mejoradas

Ejemplo:

// Tool Call: search_repository { "query": "Find files related to authentication middleware", "repositories": [ { "remote": "github", "repository": "greptileai/greptile", "branch": "main" } ], "session_id": null, "genius": true }

Respuesta:

{ "sources": [ { "repository": "greptileai/greptile", "remote": "github", "branch": "main", "filepath": "/src/auth/middleware.js", "linestart": 1, "lineend": 45, "summary": "Authentication middleware implementation" }, { "repository": "greptileai/greptile", "remote": "github", "branch": "main", "filepath": "/src/auth/jwt.js", "linestart": 1, "lineend": 78, "summary": "JWT token handling functions" } ] }

4. Obtener información del repositorio

Obtiene información sobre un repositorio específico que ha sido indexado.

Parámetros:

  • remote (cadena): el host del repositorio, ya sea "github" o "gitlab"
  • repository (cadena): El repositorio en formato propietario/repositorio
  • branch (cadena): La rama que fue indexada

Ejemplo:

// Tool Call: get_repository_info { "remote": "github", "repository": "greptileai/greptile", "branch": "main" }

Respuesta:

{ "repository": "greptileai/greptile", "remote": "github", "branch": "main", "private": false, "status": "COMPLETED", "filesProcessed": 234, "numFiles": 234, "sha": "a1b2c3d4e5f6..." }

Ejemplos de integración

1. Integración con Claude.ai a través de la API antrópica

from anthropic import Anthropic import json import requests # Set up Anthropic client anthropic = Anthropic(api_key="your_anthropic_key") # Function to call Greptile MCP def query_code(question, repositories): response = requests.post( "http://localhost:8050/tools/greptile/query_repository", json={ "query": question, "repositories": repositories, "genius": True } ) return json.loads(response.text) # Ask Claude with enhanced code context def ask_claude_with_code_context(question, repositories): # Get code context from Greptile code_context = query_code(question, repositories) # Format the context for Claude formatted_context = f"Code Analysis Result:\n{code_context['message']}\n\nRelevant Files:\n" for source in code_context.get('sources', []): formatted_context += f"- {source['filepath']} (lines {source['linestart']}-{source['lineend']})\n" # Send to Claude with context message = anthropic.messages.create( model="claude-3-opus-20240229", max_tokens=1000, messages=[ {"role": "user", "content": f"Based on this code context:\n\n{formatted_context}\n\nQuestion: {question}"} ] ) return message.content # Example usage answer = ask_claude_with_code_context( "How does the authentication system work?", [{"remote": "github", "repository": "greptileai/greptile", "branch": "main"}] ) print(answer)

2. Integración con un chatbot basado en LLM

from fastapi import FastAPI, Request from fastapi.responses import JSONResponse import httpx import json app = FastAPI() # Greptile MCP endpoint GREPTILE_MCP_URL = "http://localhost:8050/tools/greptile" @app.post("/chat") async def chat_endpoint(request: Request): data = await request.json() user_message = data.get("message", "") # Check if this is a code-related question if "code" in user_message or "repository" in user_message or "function" in user_message: # Query the repository through Greptile MCP async with httpx.AsyncClient() as client: response = await client.post( f"{GREPTILE_MCP_URL}/query_repository", json={ "query": user_message, "repositories": [ {"remote": "github", "repository": "your-org/your-repo", "branch": "main"} ], "genius": True } ) greptile_result = response.json() # Process the result and return to the user answer = greptile_result.get("message", "") sources = greptile_result.get("sources", []) return JSONResponse({ "message": answer, "code_references": sources }) # For non-code questions, use your regular LLM return JSONResponse({ "message": "This appears to be a general question. I'll handle it normally." }) # Run with: uvicorn app:app --reload

3. Herramienta de consulta de código de línea de comandos

#!/usr/bin/env python3 import argparse import json import requests import sys def main(): parser = argparse.ArgumentParser(description="Query code repositories using natural language") parser.add_argument("query", help="The natural language query about the code") parser.add_argument("--repo", "-r", required=True, help="Repository in format github:owner/repo:branch") parser.add_argument("--genius", "-g", action="store_true", help="Use enhanced query capabilities") args = parser.parse_args() # Parse the repository string try: remote, repo_path = args.repo.split(":", 1) if ":" in repo_path: repo, branch = repo_path.split(":", 1) else: repo = repo_path branch = "main" except ValueError: print("Error: Repository must be in format 'github:owner/repo:branch' or 'github:owner/repo'") sys.exit(1) # Prepare the request payload = { "query": args.query, "repositories": [ { "remote": remote, "repository": repo, "branch": branch } ], "genius": args.genius } # Make the request try: response = requests.post( "http://localhost:8050/tools/greptile/query_repository", json=payload ) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Error: {e}") sys.exit(1) # Process the response result = response.json() # Display the answer print("\n=== ANSWER ===\n") print(result.get("message", "No answer found")) # Display the sources sources = result.get("sources", []) if sources: print("\n=== CODE REFERENCES ===\n") for i, source in enumerate(sources, 1): print(f"{i}. {source['filepath']} (lines {source.get('linestart', '?')}-{source.get('lineend', '?')})") print(f" Repository: {source['repository']} ({source['branch']})") if 'summary' in source: print(f" Summary: {source['summary']}") print() if __name__ == "__main__": main()

Solución de problemas

Problemas comunes

1. Fallos de autenticación

Síntoma : recibe el error 401 Unauthorized o Repository not found with configured credentials .

Soluciones :

  • Verifique que su clave API de Greptile sea válida y esté configurada correctamente en el archivo .env
  • Comprueba si tu token de GitHub/GitLab ha expirado (normalmente expiran después de un período determinado)
  • Asegúrese de que su token de GitHub/GitLab tenga el alcance repo para acceder a los repositorios
  • Pruebe su token de GitHub directamente con la API de GitHub para verificar que funciona

Prueba del token de GitHub :

curl -H "Authorization: token YOUR_GITHUB_TOKEN" https://api.github.com/user
2. Repositorio no encontrado

Síntoma : la API devuelve un error 404 o el mensaje "Repositorio no encontrado".

Soluciones :

  • Verifique que el repositorio exista y sea accesible con su token de GitHub/GitLab
  • Verifique nuevamente el formato del repositorio (debe ser owner/repo )
  • Para repositorios privados, asegúrese de que su token tenga los permisos de acceso adecuados
  • Verifique que el nombre de la sucursal sea correcto
3. Problemas de conexión

Síntoma : No se puede conectar al servidor MCP.

Soluciones :

  • Comprueba si el servidor está en ejecución ( ps aux | grep src.main )
  • Verifique que el puerto no esté siendo utilizado por otra aplicación
  • Compruebe la configuración de red y la configuración del firewall
  • Pruebe un puerto diferente cambiando el valor PORT en su archivo .env
4. Problemas con Docker

Síntoma : el contenedor Docker no se inicia o no funciona correctamente.

Soluciones :

  • Comprobar los registros de Docker: docker logs <container_id>
  • Verifique que el archivo .env esté montado correctamente
  • Asegúrese de que la asignación de puertos sea correcta en su comando docker run
  • Compruebe si la configuración de red de Docker permite las conexiones necesarias

Registros y depuración

Para habilitar un registro más detallado, configure las siguientes variables de entorno:

# Add to your .env file DEBUG=true LOG_LEVEL=debug

Para solucionar problemas de interacciones específicas de MCP, examine los registros del servidor MCP:

# Run with enhanced logging LOG_LEVEL=debug python -m src.main

Configuración avanzada

Variables de entorno

VariableDescripciónPor defecto
TRANSPORTMétodo de transporte ( sse o stdio )sse
HOSTHost al que vincularse para el transporte SSE0.0.0.0
PORTPuerto para transporte SSE8050
GREPTILE_API_KEYSu clave API de Greptile(requerido)
GITHUB_TOKENToken de acceso personal de GitHub/GitLab(requerido)
GREPTILE_BASE_URLURL base de la API de Greptilehttps://api.greptile.com/v2
DEBUGHabilitar el modo de depuraciónfalse
LOG_LEVELNivel de registroinfo

Puntos finales de API personalizados

Si necesita utilizar un punto final de API de Greptile personalizado (por ejemplo, para instalaciones empresariales), modifique la variable de entorno GREPTILE_BASE_URL :

GREPTILE_BASE_URL=https://greptile.your-company.com/api/v2

Ajuste del rendimiento

Para implementaciones de producción, considere estas optimizaciones de rendimiento:

  1. Configuración del trabajador : al utilizar el transporte SSE con Uvicorn, configure la cantidad de trabajadores adecuada:
    # For CPU-bound applications: workers = 1-2 × CPU cores uvicorn src.main:app --workers 4
  2. Configuración de tiempo de espera : ajuste los tiempos de espera para repositorios grandes:
    # Add to .env GREPTILE_TIMEOUT=120.0 # Default is 60.0 seconds
  3. Optimización de la memoria : para implementaciones grandes, tenga en cuenta los límites de recursos del contenedor:
    docker run --rm --env-file .env -p 8050:8050 --memory="1g" --cpus="1.0" greptile-mcp

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.

  1. Bifurcar el repositorio
  2. Crea tu rama de funciones ( git checkout -b feature/amazing-feature )
  3. Confirme sus cambios ( git commit -m 'Add some amazing feature' )
  4. Empujar a la rama ( git push origin feature/amazing-feature )
  5. Abrir una solicitud de extracción

Configuración de desarrollo

Para el desarrollo, instale dependencias adicionales:

pip install -e ".[dev]"

Ejecutar pruebas:

pytest

Licencia

Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.


Desarrollado por ( https://github.com/sosacrazy126 )

Related MCP Servers

View all related MCP servers

ID: lj8vf0zafc