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 [Model Context Protocol] simple (https://www.ibm.com/mx-es/think/topics/model-context-protocol) (MCP) que expone una única herramienta para buscar tutoriales de IBM. Al utilizar la infraestructura 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 perfectamente formateada. También agregará manejo de errores para problemas de red, JSON incorrecto y problemas inesperados, lo que hace que la herramienta sea robusta y fácil de usar para principiantes. Finalmente, ejecutará el servidor MCP para que pueda conectarse y probarse con un cliente como Cursor.

¿Qué es MCP?

Tanto los desarrolladores empresariales como los de empresas emergentes están desarrollando cada vez más [inteligencia artificial] generativa (https://www.ibm.com/mx-es/think/topics/artificial-intelligence) soluciones impulsadas por IA. Para que sus soluciones sean más útiles, necesitan información y contexto actualizados. El machine learning modelos necesita 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 y sistemas de IA. Simplifica la coordinación en un modelo de lenguaje grande (LLM) y fuentes y herramientas de datos externas. Una analogía común es pensar en 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 agentes de IA.

MCP fue desarrollado por Anthropic y fue adoptado por los principales proveedores de IA, incluidos OpenAI, Google DeepMind y la industria en general. 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 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. MCP proporciona un LLM con información contextual de manera similar a otros patrones de diseño que han comenzado a surgir, como [generación aumentada por recuperación] (https://www.ibm.com/mx-es/think/topics/retrieval-augmented-generation) (RAG), toolcalling y agentes de IA.

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

- Escala: los servidores MCP se pueden definir y alojar una vez y ser utilizados por 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 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 usar 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 externos, 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 lleva a resultados más precisos y confiables. MCP utiliza JSON-RPC para codificar mensajes y admite 2 mecanismos de transporte, stdio y HTTP que se puede transmitir. 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 contexto e incorporar nueva información para los contratos a medida que se ejecutan, información heredada/existente que se digitaliza pero que no necesariamente se hace digerible y más. Esa información puede ser tanto interna como externa, pero agregar contexto evita la necesidad de volver a entrenar 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 server.py al que hará referencia al crear su servidor MCP. En este tutorial, veremos la creación de un servidor MCP personalizado básico que pueda:

  • Conectarse a nuestro repositorio de tutoriales de GitHub
  • 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 construirá puede consumir fácilmente el contenido de nuestro tutorial sin necesidad de autenticación.

Paso 1: Configuración del entorno

- ‌Python 3.11 o posterior instalado en su computadora (compruébelo ejecutando la versión python3 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).

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

- macOS o Linux: use su aplicación Terminal (estos entornos son similares a Unix).

- Windows: use PowerShell o la instrucción de comando, con pequeñas diferencias de sintaxis explicadas en los siguientes pasos.

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

Cree un nuevo directorio y cd en él

  mkdir ibmtutorialmcpserver  y cd ibmtutorialmcpserver

Asegurarse de que está en el directorioibmtutorialmcpserver puede ejecutar el siguiente comando para crear un entorno virtual 

python3 -m venv venv 

Nota: En Windows, es posible que pueda reemplazarpython3  conpython

Una vez que haya creado el entorno virtual, debe activarlo con 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 activamente. También vamos a instalar elrequests package  para realizar solicitudes HTTP simples 

Instale elfastMCP Yrequests paquete conpip usando el siguiente comando

pip install fastmcp requests

Una vez completado este paso, puede verificar que fastMCP esté instalado correctamente ejecutando 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 tiene fastMCP instalado, vamos a crear nuestro servidor MCP.

Paso 2. Crear un servidor MCP

Cree un nuevo archivo en el directorio y démosle el nombreserver.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é están haciendo las partes clave. 

Importaciones y configuración

El script comienza importando FastMCP, que proporciona la infraestructura para crear un servidor MCP y solicitudes, que se utilizan para descargar datos a través de HTTP. Hemos agregado una constanteDOCS_INDEX_URL para contener 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

Luego 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 lasearch_ibmtutorials  herramienta que definimos.

Definición de la herramienta MCP 

Hay@mcp.tool  Marcas de decoradorsearch_ibmtutorials  como herramienta MCP. Esta función toma un término de búsqueda, descarga el índice del tutorial de laDOCS_INDEX_URL  mediante el usorequests.get() (con un tiempo de espera de 10 segundos por seguridad de la red) y genera una excepción si el estado de respuesta HTTP indica un error. Una vez que se recuperan los datos, se analizan de JSON a objetos de 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 que coincidan. Si un tutorial contiene el término de búsqueda en el título o en la URL, se agrega 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 amigable que indica que no se encontró 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 se destaquen en los clientes que lo admiten. El texto final con formato se devuelve como una sola cadena.

Manejo de errores

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

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

ValueError  (que puede ser generado por .json()) detecta casos en los que la respuesta no es JSON válida.

Un generalException  handler 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, elif name == “main” : el bloque garantiza quemcp.run() se ejecuta solo cuando el script se ejecuta directamente. Este paso inicia el servidor MCP, haciendo que elsearch_ibmtutorials  disponible para cualquier cliente de MCP, como MCP Inspector. Esta herramienta es útil para solucionar problemas y depurar su servidor MCP. La herramienta proporciona una interfaz de usuario (IU) que puede usar para depurar el servidor MCP y la validación del comportamiento esperado. 

Paso 3. Agregar 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 agregar el servidor MCP dentro de Cursor siguiendo estas instrucciones.

Abra la configuración del cursor y vaya a Herramientas e integraciones. Seleccione Nuevo servidor MCP y péguelo en mcp.json que Cursor abre en una nueva pestaña. Asegúrese de reemplazar <YOUR PATH> con el directorio en el que se encuentra. Puede ejecutar pwd en su terminal para obtener la ruta completa. Para obtener más información sobre Cursor y MCP, consulte los documentos 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 agregar el servidor MCP siguiendo las instrucciones vinculadas 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> con 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, pongamos en marcha el servidor para que pueda usar 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.

¡Excelente! El agente pudo utilizar el search_ibmtutorials  herramienta que creamos para buscar tutoriales relacionados con series temporales.

Resumen

En este tutorial, aprendió a crear un servidor MCP para buscar en todos nuestros tutoriales utilizando cualquier cliente MCP que prefiera. Creó un servidor MCP con una única herramienta de búsqueda que recupera un índice JSON remoto de tutoriales, filtró los resultados en función de un término de búsqueda y los devolvió en un formato legible. Utiliza fastmcp para registrar y ejecutar la herramienta, solicita obtener los datos e incluye manejo de errores para la red, análisis y problemas inesperados. Cuando se ejecuta, los clientes MCP pueden conectar el servidor para consultar en vivo todos nuestros tutoriales.

Soluciones relacionadas
Agentes de IA para empresas

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

    Explore watsonx Orchestrate
    Soluciones de agentes de IA de IBM

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

    Explorar las soluciones de agentes de IA
    Servicios de IA de IBM Consulting

    Los servicios de IA de IBM Consulting ayudan a reinventar la forma en que las empresas trabajan con IA para la transformación.

    Explorar los servicios de inteligencia artificial
    Dé el siguiente paso

    Ya sea que elija personalizar aplicaciones y habilidades predefinidas o crear y desplegar servicios agénticos personalizados utilizando un estudio de IA, la plataforma IBM watsonx responde a sus necesidades.

    Explore watsonx Orchestrate Explore watsonx.ai