Cómo crear un servidor MCP

Autores

Ash Minhas

Manager, Technical Content | AI Advocate

IBM

PJ Hagerty

Lead, AI Advocacy

IBM

Erika Russi

Data Scientist

IBM

En este tutorial, creará un sencillo servidor de [protocolo de contexto del modelo] (https://www.ibm.com/es-es/think/topics/model-context-protocol) (MCP) que expone una única herramienta para buscar tutoriales de IBM. Al utilizar el marco "fastmcp" y la biblioteca de solicitudes, el script descarga un índice JSON de tutoriales desde una URL remota. A continuación, busca coincidencias con la consulta de un usuario y devuelve una lista de resultados ordenada. También añadirá la gestión de errores para problemas de red, JSON defectuoso y problemas inesperados, haciendo que la herramienta sea robusta y fácil de usar para principiantes. Por último, ejecutará el servidor MCP para que pueda conectarse y probarse con un cliente como Cursor.

¿Qué es MCP?

Tanto los desarrolladores de empresas como los de startups están desarrollando cada vez más soluciones impulsadas por la [inteligencia artificial] (https://www.ibm.com/es-es/think/topics/artificial-intelligence) generativa . Para que sus soluciones sean más útiles, necesitan información y contexto actualizados. Los modelos de machine learning necesitan interoperar con herramientas, interfaces de programación de aplicaciones(API), kits de desarrollo de software (SDK) y sistemas front-end para que eso suceda.

El MCP estandariza la forma en que se pasa el contexto entre los modelos de IA y sistemas. Simplifica la coordinación en un modelo de lenguaje de gran tamaño (LLM) y fuentes y herramientas de datos externas. Una analogía común es pensar en el MCP como un puerto USB-C para un LLM. Hacen que un LLM sea mucho más útil porque el modelo tiene acceso a capacidades y datos que no formaban parte del entrenamiento del modelo. Esta capacidad es especialmente útil al crear agentes de IA.

MCP fue desarrollado por Anthropic y fue adoptado por los principales proveedores de IA, incluidos OpenAI, Google DeepMind y los sectores más amplios. Proporciona una forma segura y estandarizada para que los modelos de IA accedan y utilicen datos externos, recursos (como plantillas de instrucciones) y herramientas.

Además, entornos de desarrollo integrados (IDE) como Cursor y Visual Studio Code también han adoptado MCP, lo que permite a sus asistentes de IA acceder a los servidores MCP para que su uso sea más relevante para el contexto y más fácil para los desarrolladores. Creado como un estándar abierto, las organizaciones utilizan el MCP para actuar como puente entre el mundo estocástico de la IA generativa y el mundo determinista de la mayoría de los sistemas empresariales que existen en la actualidad. El MCP proporciona a un LLM información contextual de forma similar a otros patrones de diseño que han empezado a surgir, como generación aumentada por recuperación (RAG), llamadas a herramientas y agentes de IA.

Algunas ventajas de usar MCP en comparación con estas otras soluciones incluyen:

- Escala: los servidores MCP pueden definirse y alojarse una vez y utilizarse en muchos sistemas de IA. Esta capacidad limita la necesidad de definir el acceso a los mismos datos de origen, recursos y herramientas de IA para múltiples sistemas de IA generativa.

- Recuperación de datos: a diferencia de la RAG, donde la recuperación de datos requiere preprocesamiento y vectorización antes de la consulta, MCP es dinámico y permite fluctuaciones y actualizaciones de fuentes de información en tiempo real.

- Complejidad: MCP es bastante sencillo de configurar e incorporar a las aplicaciones de IA, como demostramos aquí. Puede utilizar archivos de configuración fácilmente para hacer que un servidor MCP sea portátil en todos los entornos.

- Independiente de la plataforma: más allá del hecho de que puede crear servidores MCP con Python, TypeScript u otros lenguajes, tampoco están acoplados a una solución LLM específica.

- Depuración a través de un modelo cliente/servidor: el cliente MCP envía solicitudes al servidor MCP, que luego obtiene los datos necesarios de varios sistemas y fuentes externas, ya sean API, bases de datos o archivos locales. Este enfoque estructurado garantiza que el modelo de IA reciba un contexto coherente y relevante, lo que conduce a resultados más precisos y fiables. MCP utiliza JSON-RPC para codificar mensajes y admite 2 mecanismos de transporte, stdio y HTTP streamable. En iteraciones anteriores del protocolo, también admitía HTTP con eventos enviados por el servidor (SSE)

La necesidad de mantenerse constantemente al día con la información más reciente que su empresa necesita puede ser desalentadora. MCP puede ayudar a crear un contexto e incorporar nueva información para los contratos a medida que se ejecutan, información heredada que se está digitalizando pero que no necesariamente se ha hecho digerible y mucho más. Esa información puede ser tanto interna como externa, pero al añadir contexto se evita la lenta necesidad de reciclar un LLM para que sea útil.

Hay muchos servidores MCP remotos disponibles, así como muchas implementaciones de referencia de github.com

Pasos

Esta guía paso a paso se puede encontrar en nuestro repositorio de GitHub junto con el script server.py al que hará referencia al crear su servidor MCP. En este tutorial, veremos cómo crear un servidor MCP personalizado básico que pueda:

  • Conectarse a nuestro repositorio GitHub de tutoriales
  • Realizar una búsqueda de temas que puedan interesar al usuario
  • Devolver los resultados con enlaces al tutorial

Para facilitar la realización de este tutorial, hemos creado un mecanismo mediante el cual el servidor que usted creará podrá consumir fácilmente el contenido de nuestro tutorial sin necesidad de autenticación.

Paso 1. Configure su entorno

- ‌Python 3.11 o posterior instalado en su ordenador (compruébelo ejecutando python3 --version en su terminal).

- El módulo venv integrado está disponible (viene con Python en la mayoría de los sistemas; en algunas distribuciones de Linux, es posible que deba instalarlo por separado con Sudo apt install python3-venv).

- Un terminal de línea de comandos (CLI):

- macOS o Linux: utilice su aplicación Terminal (estos entornos son de tipo Unix).

- Windows: utilice PowerShell o Símbolo del sistema, con pequeñas diferencias de sintaxis explicadas en el próximo paso.

- Un editor de texto o IDE de su elección 

Cree un nuevo directorio y acceda a él

  mkdir ibmtutorialmcpserver  y cd ibmtutorialmcpserver

Asegurándose de que se encuentra en el directorioibmtutorialmcpserver puede ejecutar el siguiente comando para crear un entorno virtual 

python3 -m venv venv 

Nota: en Windows, podría sustituirpython3  conpython

Una vez que haya creado el entorno virtual, debe activarlo mediante el siguiente comando

source venv/bin/activate

Una vez activado, es probable que su shell le muestre(venv) en la instrucción 

Ahora necesita instalar el paquete Python parafastMCP . Este marco de código abierto proporciona todas las características necesarias para ejecutar un servidor MCP y se mantiene de forma activa. También vamos a instalar elrequests package  para realizar solicitudes HTTP sencillas 

Instale el paquetefastMCP yrequests conpip mediante el siguiente comando

pip install fastmcp requests

Una vez completado este paso, puede comprobar que fastMCP está instalado correctamente con el siguiente comando 

fastmcp version

Si obtiene un resultado similar al siguiente, tiene fastMCP instalado en su entorno virtual.

FastMCP version:                                       2.10.1
MCP version:                                           1.10.1
Python version:                                       3.11.13
Platform:                          macOS-15.5-arm64-arm-64bit
FastMCP root path: /opt/homebrew/lib/python3.11/site-packages

Ahora que tiene fastMCP instalado, vamos a crear nuestro servidor MCP.

Paso 2. Crear un servidor MCP

Cree un nuevo archivo en el directorio y llamémosleserver.py .

Una vez que tenga ese archivo, ábralo y copie y pegue el siguiente fragmento de código en él 

# Simple MCP server that exposes a single tool to search IBM tutorials.
# How to run:
# 1) Install dependencies: pip install fastmcp requests
# 2) Start the server using an MCP client with the command: fastmcp run <YOUR PATH>/server.py

from fastmcp import FastMCPimport requests

# Source of the tutorials index 
DOCS_INDEX_URL = "https://raw.githubusercontent.com/IBM/ibmdotcom-tutorials/refs/heads/main/docs_index.json"


mcp = FastMCP("IBM Tutorials")

@mcp.tool
def search_ibmtutorials(query: str) -> str:
    """
    Search for tutorials on GitHub by downloading a JSON file from a GitHub repo and searching the payload for any relevant results and the respective details

Args:
    query: The search term to look for in tutorial titles and URLs

Returns:
    A formatted list of relevant tutorial results
    """
    try:
        # Download the JSON file from the GitHub repo
        response = requests.get(DOCS_INDEX_URL, timeout=10)
        response.raise_for_status() # Raise an exception for bad status codes

        # Parse the JSON data
        tutorials = response.json()

        # Search for relevant tutorials (case-insensitive)
        query_lower = query.lower()
        relevant_tutorials = []

        for tutorial in tutorials:
            # Search in title and URL
            title = tutorial.get('title', '').lower()
            url_path = tutorial.get('url', '').lower()

            if query_lower in title or query_lower in url_path:
                relevant_tutorials.append(tutorial)

        # Format and return results
        if not relevant_tutorials:
            return f"No IBM tutorials found matching '{query}'"

        # Format the results
            result_lines = [f"Found {len(relevant_tutorials)} tutorial(s) matching '{query}':\n"]

        for i, tutorial in enumerate(relevant_tutorials, 1):
            title = tutorial.get('title', 'No title')
            tutorial_url = tutorial.get('url', 'No URL')
            date = tutorial.get('date', 'No date')
            author = tutorial.get('author', '')

            result_lines.append(f"{i}. **{title}**")
            result_lines.append(f" URL: {tutorial_url}")
            result_lines.append(f" Date: {date}")
            if author:
                result_lines.append(f" Author: {author}")
            result_lines.append("") # Empty line for spacing

        return "\n".join(result_lines)

    except requests.exceptions.RequestException as e:
    return f"Error fetching tutorials from GitHub: {str(e)}"
    except ValueError as e:
    return f"Error parsing JSON data: {str(e)}"
    except Exception as e:
    return f"Error searching IBM tutorials: {str(e)}"


if __name__ == "__main__":
    mcp.run()

Repasemos el código anterior y expliquemos qué hacen las partes clave. 

Importaciones y configuración

El script comienza importando FastMCP, que proporciona el marco para crear un servidor MCP, y las solicitudes, que se utilizan para descargar datos a través de HTTP. Hemos añadido una constanteDOCS_INDEX_URL para almacenar la URL JSON remota para el índice de tutoriales. Este enfoque facilita el cambio de la ubicación de origen si tuviera otra fuente de datos JSON para la que quisiera reutilizar este tutorial más adelante.

Configuración del servidor MCP

A continuación, creamos una instancia de servidor MCP conFastMCP(“IBM Tutorials”) . Este paso actúa como controlador central para todas las herramientas que el servidor expondrá a los clientes MCP, como la herramientasearch_ibmtutorials  que definimos.

Definición de la herramienta MCP 

El@mcp.tool  marcasearch_ibmtutorials  como una herramienta MCP. Esta función toma un término de búsqueda, descarga el índice de tutoriales desde la constanteDOCS_INDEX_URL  mediante el uso derequests.get() (con un tiempo de espera de 10 segundos para seguridad de la red) y genera una excepción si el estado de la respuesta HTTP indica un error. Una vez recuperados los datos, estos se analizan de JSON a objetos Python.

La búsqueda no distingue entre mayúsculas y minúsculas: la consulta se convierte a minúsculas, y el título y la URL de cada tutorial también se reducen para la búsqueda de coincidencias. Si un tutorial contiene el término buscado en el título o en la URL, se añade a una lista de resultados relevantes.

Formateo y devolución de resultados

Si no hay tutoriales que coincidan con la búsqueda, la función devuelve un mensaje descriptivo que indica que no se ha encontrado nada. Si hay coincidencias, la función crea una lista numerada y formateada que muestra el título, la URL, la fecha y, si está disponible, el autor de cada tutorial. El formato utiliza negrita al estilo Markdown para los títulos, de modo que destaquen en los clientes que lo admiten. El texto formateado final se devuelve como una sola cadena.

Manejo de errores

La función incluye el manejo de excepciones específicas:

requests.exceptions.RequestException captura problemas de red como tiempos de espera o malas conexiones.

ValueError  (que puede generarse mediante .json()) captura casos en los que la respuesta no es JSON válido.

Un gestor deException  genérico detecta cualquier otra cosa inesperada.

Cada error devuelve un mensaje descriptivo a la persona que llama en lugar de detener el programa.

Iniciar el servidor

En la parte inferior, el bloqueif name == “main” : garantiza quemcp.run() se ejecute solo cuando el script se inicia directamente. Este paso inicia el servidor MCP, haciendo que la herramientasearch_ibmtutorials  esté disponible para cualquier cliente MCP, como MCP Inspector. Esta herramienta es útil para solucionar problemas y depurar su servidor MCP. La herramienta proporciona una IU que puede utilizar para depurar el servidor MCP y validar el comportamiento esperado. 

Paso 3. Añadir su servidor MCP a su IDE

Ahora que ha creado su servidor, debe habilitarlo en su IDE antes de poder usarlo. Hay muchos clientes que admiten MCP con varios niveles de integración con el protocolo. El sitio web oficial de MCP proporciona una lista exhaustiva de ejemplos de clientes.
Si tiene Cursor instalado, puede añadir el servidor MCP dentro de Cursor siguiendo estas instrucciones.

Abra la configuración de Cursor y vaya a Herramientas e integraciones. Seleccione Nuevo servidor MCP y pegue el contenido en el archivo mcp.json que Cursor abre en una nueva pestaña. Asegúrese de reemplazar <YOUR PATH>
por el directorio en el que se encuentra. Puede ejecutar pwd en su terminal para obtener la ruta completa. Para más información sobre Cursor y MCP, consulte la documentación de Cursor.

{
  &quot;mcpServers&quot;: {
    &quot;tutorials&quot;: {
      &quot;command&quot;: &quot;fastmcp&quot;,
      &quot;args&quot;: [&quot;run <YOUR PATH>/ibmtutorialmcpserver/server.py&quot;],
      &quot;env&quot;: {
      }
    }
  }
}

Si es usuario de Microsoft VS Code, puede añadir el servidor MCP siguiendo las instrucciones enlazadas aquí. Asegúrese de que Copilot esté configurado en VS Code antes de continuar.
Si desea habilitar el servidor MCP mediante un archivo, cree un archivo .vscode/mcp.json en el directorio de este proyecto y copie y pegue este código en el archivo. Asegúrese de reemplazar <YOUR PATH> por el directorio en el que se encuentra. Puede ejecutar pwd en su terminal para obtener la ruta completa.

&quot;servers&quot;: {
		&quot;IBM Tutorials&quot;: {
			&quot;type&quot;: &quot;stdio&quot;,
			&quot;command&quot;: &quot;fastmcp&quot;,
			&quot;args&quot;: [
				&quot;run&quot;,
				&quot;<YOUR PATH>/ibmtutorialmcpserver/server.py&quot;
			]
		},
	},

Paso 4. Utilizar su servidor MCP

Ahora que ha habilitado su servidor MCP, pongámoslo en marcha para que pueda utilizar la herramienta creada en server.py. Si utiliza VS Code, consulte estos documentos.

En el chat del IDE, preguntaré "¿Cuáles son algunos tutoriales de series temporales de IBM?". A continuación se muestra el resultado recibido, pero su respuesta puede variar según el modelo utilizado y su IDE.

Resultado:

Here are some IBM time series tutorials:

Time series forecasting with Lag-Llama (zero-shot learning)
Tutorial link
Predict overnight low temperatures using the Lag-Llama model in a zero-shot learning scenario.

Using the watsonx.ai Time Series Forecasting API to predict energy demand
Tutorial link
Predict energy demand with the watsonx.ai Time Series Forecasting API.
Authors: Aleksandra Kłeczek and Meredith Syed

Let me know if you want details or help with a specific tutorial.

¡Genial! El agente ha podido utilizar la herramienta search_ibmtutorials  que creamos para buscar tutoriales relacionados con series temporales.

Resumen

En este tutorial, ha aprendido a crear un servidor MCP para buscar en todos nuestros tutoriales mediante cualquier cliente MCP que prefiera. Ha creado un servidor MCP con una única herramienta de búsqueda que recupera un índice JSON remoto de tutoriales, filtra los resultados en función de un término de búsqueda y los devuelve en un formato legible. Utiliza fastmcp para registrar y ejecutar la herramienta, solicita la obtención de los datos e incluye la gestión de errores para la red, el análisis y los problemas inesperados. Cuando se ejecuta, los clientes MCP pueden conectar el servidor para consultar en directo todos nuestros tutoriales.

Soluciones relacionadas
Agentes de IA para empresas

Cree, implemente y gestione potentes asistentes y agentes de IA que automaticen flujos de trabajo y procesos con IA generativa.

    Explore watsonx Orchestrate
    Soluciones de agente de IA de IBM

    Construya el futuro de su empresa con soluciones de IA en las que puede confiar.

    Explore las soluciones de los agentes de IA
    Servicios de IA de IBM Consulting

    Los servicios de IA de IBM Consulting ayudan a reinventar la forma de trabajar de las empresas usando IA para la transformación.

    Explore los servicios de inteligencia artificial
    Dé el siguiente paso

    Tanto si opta por personalizar las aplicaciones y habilidades prediseñadas como si prefiere crear e implementar servicios agentivos personalizados mediante un estudio de IA, la plataforma IBM watsonx le ofrece todo lo que necesita.

    Explore watsonx Orchestrate Explore watsonx.ai