MCP Server + Asgardeo

Un servidor MCP de ejemplo que utiliza Asgardeo para la autenticación y conexión de clientes.

Documentación

Servidor Model Context Protocol (MCP) + Asgardeo

Este es un servidor de muestra Model Context Protocol (MCP) que permite a clientes MCP remotos conectarse y autenticarse usando Asgardeo.

Asgardeo autentica a los usuarios que acceden al servidor MCP y le permite controlar el acceso a las herramientas según los permisos a nivel de aplicación y de organización definidos para cada usuario.

El servidor MCP está impulsado por Cloudflare Workers:

  • Actúa como Servidor OAuth para sus clientes MCP
  • Actúa como Cliente OAuth/OIDC para su organización Asgardeo

Primeros pasos

Antes de comenzar, asegúrese de tener los siguientes requisitos previos:

Configurar Asgardeo

Primero, inicie sesión en la consola de Asgardeo y navegue a Aplicaciones > Nueva aplicación.

Luego, seleccione Aplicación web tradicional y complete el asistente emergente proporcionando el nombre dado y la URL de redirección autorizada. (Asegúrese de que el protocolo permanezca configurado como OpenID Connect (OIDC).)

Nota - El http://localhost:8788/callback se usa solo durante las pruebas locales; la URL de devolución de llamada del despliegue de Cloudflare se agregará en una etapa posterior.

Tome nota de los siguientes valores de las pestañas Protocolo e Información de la aplicación registrada.

  • client-id de la pestaña Protocolo.
  • client-secret de la pestaña Protocolo.
  • El nombre de su organización Asgardeo

Desarrollo y pruebas locales

Clone el repositorio directamente e instale las dependencias usando las siguientes instrucciones.


# Clone the repository
git clone https://github.com/sagara-gunathunga/cloudflare-mcp-asgardeo

# Move to the demo project directory
cd demo-mcp-server

## Install dependencies
npm install

A continuación, cree un archivo .dev.vars en la raíz de su proyecto con los siguientes valores.

# .dev.vars
ASGARDEO_CLIENT_ID=<client-id from the previous step>
ASGARDEO_CLIENT_SECRET=<client-secret from the previous step>
ASGARDEO_BASE_URL=https://api.asgardeo.io/t/<Asgardeo organization name>
ASGARDEO_SCOPE=openid profile email roles

Desarrollar y probar

Ejecute el servidor localmente para que esté disponible en http://localhost:8788

npm run dev

Para autenticarse con Asgardeo, primero debe tener una cuenta de usuario creada. Si aún no lo ha hecho, siga esta guía para crear un usuario en Asgardeo.

A continuación, inicie el Inspector de MCP localmente usando el siguiente comando.

npx @modelcontextprotocol/inspector

Para probar el servidor local, cambie el Tipo de transporte a SSE e ingrese http://localhost:8788/sse en el Inspector y presione conectar. Una vez que siga las indicaciones, podrá autenticarse con Asgardeo y usar funciones como “List Tools” en el Inspector. Cuando invoque la herramienta userInfo, debería ver resultados similares al ejemplo que se muestra en la captura de pantalla a continuación.

Testing localy using the Inspector

Alternativamente, puede probar usando el Cloudflare Workers AI LLM Playground. Simplemente ingrese http://localhost:8787/sse como la URL del servidor MCP y haga clic en Conectar. Esto lo redirigirá a la página de inicio de sesión de Asgardeo. Una vez que haya completado el proceso de inicio de sesión, podrá interactuar con el LLM en el Playground y usar las herramientas definidas en su servidor MCP.

Por ejemplo, intente preguntarle al LLM: “¿Quién soy?”

Testing localy using the Playground

Despliegue en Cloudflare

Primero, cree un espacio de nombres KV en Cloudflare usando el siguiente comando.

npx wrangler kv namespace create OAUTH_KV

Asegúrese de actualizar el archivo wrangler.jsonc con el valor id recibido después de ejecutar el comando anterior.

"kv_namespaces": [
  {
    "binding": "OAUTH_KV",
    "id": "<your-kv-id>"
  }
],

Luego, configure los siguientes secretos mediante Wrangler ejecutando los siguientes comandos.

npx wrangler@latest secret put ASGARDEO_CLIENT_ID
npx wrangler@latest secret put ASGARDEO_CLIENT_SECRET
npx wrangler@latest secret put ASGARDEO_BASE_URL
npx wrangler@latest secret put ASGARDEO_SCOPE
npx wrangler@latest secret put COOKIE_ENCRYPTION_KEY # add any random string here e.g. openssl rand -hex 32

Puede usar los valores almacenados en el archivo .dev.vars con el comando anterior.

Desplegar y probar

Despliegue el servidor MCP para que esté disponible en su dominio workers.dev.

npx wrangler@latest deploy

Tome nota de la URL del Worker de Cloudflare recién creada, que se imprime como salida cuando ejecuta el comando de despliegue. También puede encontrar esta URL iniciando sesión en la consola web de Cloudflare. La URL del Worker generalmente sigue este formato:https://remote-mcp-asgardeo.<your-subdomain>.workers.dev

A continuación, debe configurar una URL de devolución de llamada usando la URL del Worker anterior. La URL de devolución de llamada completa debe tener el siguiente formato.

https://remote-mcp-asgardeo.<your-subdomain>.workers.dev/callback

Para configurarlo:

  1. Inicie sesión en la consola de Asgardeo.
  2. Navegue a la aplicación que creó.
  3. Vaya a la pestaña Protocolo.
  4. Agregue el valor anterior en URLs de redirección autorizadas para que Asgardeo pueda reconocerlo como una URL de redirección válida.

La URL de conexión del servidor MCP que desplegamos en Cloudflare tiene el siguiente formato.

https://remote-mcp-asgardeo.<your-subdomain>.workers.dev/sse

Para probar el servidor remoto, cambie el Tipo de transporte a SSE e ingrese https://remote-mcp-asgardeo.<your-subdomain>.workers.dev/sse en el Inspector y presione conectar. Una vez que siga las indicaciones, podrá autenticarse con Asgardeo y usar funciones como “List Tools” en el Inspector. Cuando invoque la herramienta userInfo.

Alternativamente, puede probar usando el Cloudflare Workers AI LLM Playground. Simplemente ingrese https://remote-mcp-asgardeo.<your-subdomain>.workers.dev/sse como la URL del servidor MCP y haga clic en Conectar. Esto lo redirigirá a la página de inicio de sesión de Asgardeo. Una vez que haya completado el proceso de inicio de sesión, podrá interactuar con el LLM en el Playground y usar las herramientas definidas en su servidor MCP.

Por ejemplo, intente preguntarle al LLM: “¿Quién soy?”

Uso de Cursor y otros clientes MCP

Para conectar Cursor con su servidor MCP, elija Type: "Comando" y en el campo Command, combine los campos de comando y argumentos en uno (por ejemplo, npx mcp-remote https://<your-worker-name>.<your-subdomain>.workers.dev/sse).

Tenga en cuenta que, aunque Cursor admite servidores HTTP+SSE, no admite autenticación, por lo que aún necesita usar mcp-remote (y usar un servidor STDIO, no uno HTTP).

Puede conectar su servidor MCP a otros clientes MCP como Windsurf abriendo el archivo de configuración del cliente, agregando el mismo JSON que se usó para la configuración de Claude y reiniciando el cliente MCP.

Control de acceso

Este servidor MCP usa Asgardeo tanto para la autenticación como para el control de acceso.

  • Todos los usuarios autenticados tienen acceso a la herramienta userInfo.
  • Los usuarios con el rol manager pueden acceder a la herramienta getDirectReportees. Para otros, esta herramienta no será visible.

Para admitir este escenario de acceso basado en roles, Asgardeo devuelve los roles de usuario para los usuarios autenticados, lo que permite al servidor MCP evaluar los permisos en consecuencia.

Para probar esto:

  1. Cree un nuevo rol llamado manager en Asgardeo.
  2. Asigne el rol a un usuario siguiendo esta guía.
  3. Asegúrese de que los roles de usuario estén configurados para devolverse como atributos en el token de ID o en el endpoint de información del usuario siguiendo las instrucciones de configuración relevantes aquí.

Acceda al servidor MCP remoto desde Claude Desktop

Abra Claude Desktop y navegue a Configuración -> Desarrollador -> Editar configuración. Esto abre el archivo de configuración que controla a qué servidores MCP puede acceder Claude.

Reemplace el contenido con la siguiente configuración. Una vez que reinicie Claude Desktop, se abrirá una ventana del navegador mostrando su página de inicio de sesión OAuth. Complete el flujo de autenticación para otorgar a Claude acceso a su servidor MCP. Después de otorgar acceso, las herramientas estarán disponibles para que las use.

{
  "mcpServers": {
    "math": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp-github-oauth.<your-subdomain>.workers.dev/sse"
      ]
    }
  }
}

Una vez que las Herramientas (bajo 🔨) aparezcan en la interfaz, puede pedirle a Claude que las use.