Guía paso a paso sobre cómo convertir una aplicación FASTAPI en un servidor MCP

Fastapi-MCP es una herramienta de configuración cero que expone sin problemas los puntos finales de Fastapi como Protocolo de contexto modelo (MCP) herramientas. Le permite montar un servidor MCP directamente dentro de su aplicación Fastapi, haciendo que la integración sea fácil.

En este tutorial, exploraremos cómo usar FastAPI-MCP convirtiendo un punto final de Fastapi, que obtiene alertas para los Parques Nacionales de los Estados Unidos utilizando la API del Servicio de Parques Nacionales, en un servidor compatible con MCP. Estaremos trabajando en IDE cursor para caminar por esta configuración paso a paso.

API del Servicio de Parques Nacionales

Para usar la API del Servicio de Parques Nacionales, puede solicitar una clave API visitando este enlace y llenando un formulario corto. Una vez enviado, la clave API se enviará a su correo electrónico.

Asegúrese de mantener esta clave accesible: la usaremos en breve.

Instalación de cursor IDE

Puedes descargar el IDE cursor de cursor.com. Está construido específicamente para el desarrollo asistido por AI. Es gratis descargar y viene con un Prueba gratuita de 14 días.

Dependencias de Python

Ejecute el siguiente comando para descargar las bibliotecas requeridas:

pip install fastapi uvicorn httpx python-dotenv pydantic fastapi-mcp mcp-proxy

Crearemos una aplicación Simple Fastapi que utiliza la API del Servicio de Parques Nacionales para dar alertas relacionadas con los Parques Nacionales de EE. UU. Más tarde convertiremos esta aplicación en un servidor MCP.

Primero cree un archivo .env y almacene su clave API

NPS_API_KEY=<YOUR_API_KEY>

Reemplace con el que generó. Ahora, cree un nuevo archivo llamado App.py y pegue el siguiente código. Esto servirá como la lógica central de su aplicación:

from fastapi import FastAPI, HTTPException, Query
from typing import List, Optional
import httpx
import os
from dotenv import load_dotenv
from fastapi_mcp import FastApiMCP


# Load environment variables from .env file
load_dotenv()

app = FastAPI(title="National Park Alerts API")


# Get API key from environment variable
NPS_API_KEY = os.getenv("NPS_API_KEY")
if not NPS_API_KEY:
    raise ValueError("NPS_API_KEY environment variable is not set")

@app.get("/alerts")
async def get_alerts(
    parkCode: Optional[str] = Query(None, description="Park code (e.g., 'yell' for Yellowstone)"),
    stateCode: Optional[str] = Query(None, description="State code (e.g., 'wy' for Wyoming)"),
    q: Optional[str] = Query(None, description="Search term")
):
    """
    Retrieve park alerts from the National Park Service API
    """
    url = "https://developer.nps.gov/api/v1/alerts"
    params = {
        "api_key": NPS_API_KEY
    }
   
    # Add optional parameters if provided
    if parkCode:
        params["parkCode"] = parkCode
    if stateCode:
        params["stateCode"] = stateCode
    if q:
        params["q"] = q
   
    try:
        async with httpx.AsyncClient() as client:
            response = await client.get(url, params=params)
            response.raise_for_status()
            return response.json()
    except httpx.HTTPStatusError as e:
        raise HTTPException(
            status_code=e.response.status_code,
            detail=f"NPS API error: {e.response.text}"
        )
    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Internal server error: {str(e)}"
        )


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Para probar la aplicación, ejecute el siguiente comando en el terminal:

Una vez que el servidor se ejecute, abra su navegador y vaya a: http: // localhost: 8000/documentos. Esto abrirá una interfaz donde podemos probar nuestro punto final API

  1. Haga clic en el “Pruébalo” botón.
  2. En el campo de parámetros Park_Code, ingrese “CA” (para California Parks).
  3. Hacer clic “Ejecutar”.

Debería recibir una respuesta de 200 OK junto con una carga útil JSON que contiene información de alerta para los parques nacionales en California.

Para hacer esto, agregue el siguiente código justo antes El if __name__ == “__main__”: bloquee en su archivo app.py:

mcp = FastApiMCP(
    app,
    # Optional parameters
    name="National Park Alerts API",
    description="API for retrieving alerts from National Parks",
    base_url="http://localhost:8000",
)
mcp.mount()

.

Alternativamente, puede copiar el siguiente código y reemplazar su app.py con lo mismo:

from fastapi import FastAPI, HTTPException, Query
from typing import List, Optional
import httpx
import os
from dotenv import load_dotenv
from fastapi_mcp import FastApiMCP


# Load environment variables from .env file
load_dotenv()

app = FastAPI(title="National Park Alerts API")


# Get API key from environment variable
NPS_API_KEY = os.getenv("NPS_API_KEY")
if not NPS_API_KEY:
    raise ValueError("NPS_API_KEY environment variable is not set")

@app.get("/alerts")
async def get_alerts(
    parkCode: Optional[str] = Query(None, description="Park code (e.g., 'yell' for Yellowstone)"),
    stateCode: Optional[str] = Query(None, description="State code (e.g., 'wy' for Wyoming)"),
    q: Optional[str] = Query(None, description="Search term")
):
    """
    Retrieve park alerts from the National Park Service API
    """
    url = "https://developer.nps.gov/api/v1/alerts"
    params = {
        "api_key": NPS_API_KEY
    }
   
    # Add optional parameters if provided
    if parkCode:
        params["parkCode"] = parkCode
    if stateCode:
        params["stateCode"] = stateCode
    if q:
        params["q"] = q
   
    try:
        async with httpx.AsyncClient() as client:
            response = await client.get(url, params=params)
            response.raise_for_status()
            return response.json()
    except httpx.HTTPStatusError as e:
        raise HTTPException(
            status_code=e.response.status_code,
            detail=f"NPS API error: {e.response.text}"
        )
    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Internal server error: {str(e)}"
        )

mcp = FastApiMCP(
    app,
    # Optional parameters
    name="National Park Alerts API",
    description="API for retrieving alerts from National Parks",
    base_url="http://localhost:8000",
)
mcp.mount()

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

A continuación, deberá registrar su servidor Fastapi MCP en el cursor.

  1. Abra el cursor y navegue a:
    Archivo> Preferencias> Configuración del cursor> MCP> Agregar un nuevo servidor MCP global
  2. Esto abrirá el archivo de configuración MCP.JSON.
  3. Dentro de ese archivo, agregue la siguiente entrada y guárdela:
{
    "mcpServers": {
      "National Park Service": {
          "command": "mcp-proxy",
          "args": ["http://127.0.0.1:8000/mcp"]
      }
    }
}

Ahora ejecute la aplicación usando el siguiente comando:

Una vez que la aplicación se ejecute, navegue a Archivo> Preferencias> Configuración del cursor> MCP. Ahora debería ver su servidor recién agregado en la lista y en ejecución en la sección MCP.

Ahora puede probar el servidor ingresando un mensaje en el chat. Utilizará nuestro servidor MCP para obtener y devolver el resultado apropiado.


Además, no olvides seguirnos Gorjeo y únete a nuestro Canal de telegrama y LinkedIn GRsalpicar. No olvides unirte a nuestro 90k+ ml de subreddit.

🔥 [Register Now] Conferencia virtual de Minicon sobre AI agente: registro gratuito + Certificado de asistencia + Evento corto de 4 horas (21 de mayo, 9 am- 1 pm PST) + Hands on Workshop


Soy un graduado de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.