FreshMCP

Proporciona una interfaz MCP para operaciones de FreshMCP usando Azure Cosmos DB y AI Search.

Documentación

FreshMCP

Un servicio basado en Python que proporciona una interfaz de Protocolo de Control de Mensajes (MCP) para operaciones de FreshMCP utilizando Azure Cosmos DB y AI Search.

Descripción general

FreshMCP es un servicio integral que proporciona interfaces estandarizadas para interactuar con los servicios de Azure:

Operaciones de Cosmos DB

  • Gestión de contenedores (crear, listar, eliminar)
  • Operaciones de elementos (crear, leer, actualizar, eliminar, consultar)

Operaciones de AI Search

  • Crear índice
  • Listar índices
  • Eliminar índice

Arquitectura y flujo

Arquitectura del sistema

graph TB
    subgraph "Client Layer"
        A[VSCode/Cursor Client]
        B[Web Application]
    end

    subgraph "APIM Gateway"
        C[Azure API Management]
        D[Rate Limiting]
        E[Authentication]
        F[Request Routing]
    end

    subgraph "MCP Agent Layer"
        G[Cosmos DB MCP Agent]
        H[Search MCP Agent]
    end

    subgraph "Azure Services"
        J[Cosmos DB]
        K[AI Search]
    end

    A --> C
    B --> C
    C --> D
    C --> E
    C --> F
    F --> G
    F --> H
    G --> J
    H --> K

Flujo de solicitudes

  1. Solicitud del cliente: VSCode/Cursor o la aplicación web envía la solicitud a APIM
  2. Procesamiento de APIM:
    • Autenticación y autorización
    • Limitación y control de velocidad
    • Enrutamiento de solicitudes según el tipo de servicio
  3. Procesamiento del agente MCP:
    • Ejecución de herramientas según el tipo de solicitud
    • Operaciones específicas del servicio
    • Formato de respuesta
  4. Interacción con los servicios de Azure:
    • Llamadas directas a la API de los servicios de Azure
    • Recuperación y manipulación de datos
    • Recopilación de telemetría

Configuración de APIM

Azure API Management (APIM) actúa como la puerta de enlace central para todas las comunicaciones de los agentes MCP:

  • Autenticación: Autenticación basada en clave de suscripción
  • Limitación de velocidad: Límites configurables por suscripción
  • Enrutamiento: Enrutamiento inteligente a los agentes MCP apropiados
  • Monitoreo: Análisis y monitoreo integrados
  • Almacenamiento en caché: Almacenamiento en caché de respuestas para mejorar el rendimiento

Comunicación del agente MCP

Cada agente MCP se comunica mediante el protocolo Server-Sent Events (SSE):

  • Agente de Cosmos DB: Maneja todas las operaciones de la base de datos
  • Agente de búsqueda: Gestiona las operaciones de índice de AI Search

Requisitos previos

  • Python 3.11 o superior
  • Azure CLI
  • Azure Developer CLI (azd)
  • Docker
  • Suscripción de Azure con los permisos adecuados

Configuración de desarrollo local

  1. Clonar el repositorio:

  2. Instalar uv (si aún no está instalado):

pip install uv
  1. Crear y activar un entorno virtual usando uv:
uv venv

# Windows
.venv\Scripts\activate

# Linux/Mac
source .venv/bin/activate
  1. Instalar las dependencias usando uv:
uv sync
  1. Configurar las variables de entorno:
cp .env.example .env
# Edit .env with your Azure credentials and service settings

Puntos finales del servidor

Iniciar el servidor MCP de Cosmos DB:

python -m src.cosmos.mcp.server

El servidor se iniciará en http://localhost:8001/cosmos/sse

Iniciar el servidor MCP de AI Search:

python -m src.search.mcp.server

El servidor se iniciará en http://localhost:8002/search/sse


Configuración del MCP en el cliente

Agregue las herramientas de cualquier servidor MCP a VSCode o Cursor proporcionando un archivo de configuración JSON a continuación:

VSCode:

{
  "servers": {
    "cosmos_mcp_local": {
      "type": "sse",
      "url": "http://localhost:8001/cosmos/sse"
    },
    "search_mcp_local": {
      "type": "sse",
      "url": "http://localhost:8002/search/sse"
    }
  }
}

Cursor:

{
  "mcpServers": {
    "cosmos_mcp_local": {
      "type": "sse",
      "url": "http://localhost:8001/cosmos/sse"
    },
    "search_mcp_local": {
      "type": "sse",
      "url": "http://localhost:8002/search/sse"
    }
  }
}

Implementación con Azure Developer CLI (azd)

  1. Inicializar azd (si aún no se ha hecho):
azd init -e dev -l eastus

# -e dev is optional, it will create a new dev environment

# -l eastus is optional, it will create the resources in the eastus region
  1. Implementar la aplicación:
azd up

Esto:

  • Empaquetará los proyectos/servicios
  • Aprovisionará todos los servicios de Azure necesarios
  • Creará y enviará las imágenes de Docker al Azure Container Registry
  • Implementará las imágenes en Azure Container Apps

Configuración de RBAC para los servicios de Azure

RBAC de Cosmos DB

  1. Otorgar el rol RBAC necesario a la identidad administrada asignada por el sistema:
az cosmosdb sql role assignment create \
    --account-name <your-cosmos-account> \
    --resource-group <your-resource-group> \
    --role-definition-id "00000000-0000-0000-0000-000000000002" \
    --principal-id <managed-identity-principal-id> \
    --scope "/"

Nota: La identidad administrada asignada por el sistema se asigna a su Container App de cosmosdb de forma predeterminada.

RBAC de AI Search

  1. Otorgar el rol RBAC necesario a la identidad administrada asignada por el sistema:
az role assignment create \
    --assignee <managed-identity-principal-id> \
    --role "Search Service Contributor" \
    --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service-name>

Nota: La identidad administrada asignada por el sistema se asigna a su Container App de búsqueda de forma predeterminada.


Variables de entorno

Variables de entorno requeridas (use una tabla para listarlas):

VariableDescripciónRequerida
AZURE_TENANT_IDID de inquilino de AzureSí (si se usa una entidad de servicio)
AZURE_CLIENT_IDID de cliente para autenticaciónSí (si se usa una entidad de servicio)
AZURE_CLIENT_SECRETSecreto de cliente para autenticaciónSí (si se usa una entidad de servicio)
APPLICATIONINSIGHTS_CONNECTION_STRINGCadena de conexión de Application InsightsNo

Monitoreo

Para monitorear su aplicación:

azd monitor -e dev

Contribuciones

  1. Haga un fork del repositorio
  2. Cree una rama de características
  3. Confirme sus cambios
  4. Envíe los cambios a la rama
  5. Cree una solicitud de extracción (Pull Request)

Licencia

Este proyecto está licenciado bajo la Licencia MIT; consulte el archivo LICENSE para obtener más detalles.