Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

Utilice servidores MCP remotos

En esta guía, aprenderá a conectar su agente a servidores remotos del Protocolo de Contexto de Modelo (MCP). El motor de agentes de Atlas detecta las herramientas de los servidores MCP configurados al iniciarse y las pone a disposición del código de su agente.

La configuración del servidor MCP es idéntica para los agentes de Python y TypeScript. Solo difiere el código del agente. Los agentes de Python acceden a las herramientas mediante el método app.get_tools() y no requieren decoradores @app.tool(). Los agentes de TypeScript acceden a las herramientas mediante el método app.getTools().

El motor de agente Atlas admite el transporte MCP HTTP Streamable y proporciona dos métodos para autenticarse con servidores MCP remotos:

  • Token de portador (valor bearer_env): La plataforma lee un token estático de una variable de entorno y lo adjunta como un encabezado Authorization: Bearer en cada solicitud.

  • OAuth 2.1 (valor oauth): La plataforma utiliza una caché de tokens rellenada por el comando agentengine dev mcp auth login y actualiza automáticamente los tokens de acceso cuando caducan.

Puedes usar uno o ambos métodos de autenticación en el mismo archivo. Cada servidor en la sección mcp.servers especifica su propio método de autenticación de forma independiente, por lo que puedes conectarte a un servidor autenticado mediante bearer y a un servidor autenticado mediante OAuth en el mismo archivo agent.yaml.

Antes de comenzar, asegúrate de tener lo siguiente:

  • La interfaz de línea de comandos agentengine se instaló y autenticó correctamente. Para obtener más información, consulte la guía de instalación y autenticación.

  • Un proyecto de agente válido con un archivo agent.yaml. Para obtener más información, consulte la guía Crear un proyecto.

  • Credenciales para su servidor MCP remoto: un token de acceso personal para la autenticación mediante token de portador, o una cuenta con acceso OAuth para la autenticación OAuth.

Utilice la autenticación mediante token de portador cuando el servidor MCP acepte un token de acceso personal estático.

1

Agregue el token de portador a su archivo .env con el nombre de variable al que hará referencia en el archivo agent.yaml. El siguiente ejemplo muestra cómo agregar un token a su archivo .env:

GITHUB_MCP_TOKEN=<your-personal-access-token>

Importante

No guardes secretos en el control de versiones. Agrega el archivo .env a tu archivo .gitignore.

2

Agregue una sección mcp.servers a su archivo agent.yaml. Establezca el campo auth.type con el valor de bearer_env y el campo auth.token_env con el nombre de la variable de entorno que contiene el token. El siguiente ejemplo muestra cómo configurar un servidor MCP de GitHub en su archivo agent.yaml:

mcp:
servers:
github:
transport: streamable_http
url: https://api.githubcopilot.com/mcp/
headers:
X-MCP-Readonly: "true"
X-MCP-Toolsets: repos,issues,pull_requests,actions
auth:
type: bearer_env
token_env: GITHUB_MCP_TOKEN
timeout_seconds: 30
3

Desde el directorio de su proyecto de agente, ejecute el siguiente comando. La plataforma se conecta al servidor MCP al iniciarse y registra sus herramientas automáticamente:

agentengine dev up

Utilice la autenticación OAuth cuando el servidor MCP admita OAuth 2.1. Debe ejecutar el comando agentengine dev mcp auth login para llenar la caché de tokens antes de iniciar la pila de agentes.

1

Agregue una sección mcp.servers a su archivo agent.yaml. Establezca el campo auth.type con el valor oauth y proporcione el ámbito OAuth requerido. El siguiente ejemplo muestra cómo configurar un servidor MCP en su archivo agent.yaml:

mcp:
servers:
sentry:
transport: streamable_http
url: https://mcp.sentry.dev/mcp
auth:
type: oauth
scope: "org:read project:read team:read event:read"
timeout_seconds: 30
2

Desde el directorio de tu proyecto de agente, ejecuta el comando agentengine dev mcp auth login con el nombre del servidor que definiste en el archivo agent.yaml. El comando abre el flujo de consentimiento de OAuth en tu navegador y escribe la caché del token en el directorio ~/.agentengine/mcp-oauth:

agentengine dev mcp auth login sentry

La caché de tokens es independiente para cada proyecto y cada punto final de MCP. Iniciar sesión desde un proyecto no inicia sesión en otro, por lo que debe ejecutar el comando agentengine dev mcp auth login una vez por proyecto.

Durante el inicio de sesión, la interfaz de línea de comandos (CLI) detecta el punto final de autorización OAuth del servidor. Este punto final debe usar el esquema https. Si el servidor anuncia un punto final de autorización que usa cualquier otro esquema, el comando agentengine dev mcp auth login se detiene y genera un error Refused to open unauthorized MCP OAuth URL.

Nota

Debe ejecutar el comando agentengine dev mcp auth login antes de ejecutar el comando agentengine dev up. El entorno de ejecución monta la caché de tokens al inicio y no puede autenticarse una vez que el entorno está en funcionamiento.

3

Desde el directorio de su proyecto de agente, ejecute el siguiente comando. La plataforma se conecta al servidor MCP y registra sus herramientas automáticamente:

agentengine dev up

No es necesario definir herramientas personalizadas para los agentes que utilizan servidores MCP remotos. En su lugar, utilice los siguientes métodos para acceder a las herramientas detectadas desde todos los servidores MCP configurados:

  • Python: métodos app.get_tools() y app.get_tool_schemas()

  • TypeScript: métodos app.getTools() y app.getToolSchemas()

Los siguientes ejemplos muestran un agente mínimo desplegable que utiliza herramientas MCP remotas. El agente utiliza un LangGraph StateGraph para enrutar mensajes entre el LLM y las herramientas MCP. El LLM decide qué herramienta llamar, la clase ToolNode ejecuta la llamada a la herramienta y el resultado se devuelve al LLM hasta que no se necesiten más llamadas a herramientas.

Seleccione la pestaña correspondiente al idioma de su agente para ver el ejemplo correspondiente:

from typing import Annotated, TypedDict
from langchain_core.messages import BaseMessage
from langchain_openai import ChatOpenAI
from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode
from agent_engine_sdk_langgraph import App
app = App(app_name="my-mcp-agent")
class AgentState(TypedDict):
messages: Annotated[list[BaseMessage], add_messages]
@app.entrypoint
def build_agent():
llm = app.llm(ChatOpenAI(model="gpt-4o-mini"))
tools = app.get_tools()
llm_with_tools = llm.bind_tools(app.get_tool_schemas())
def call_model(state: AgentState):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
def should_continue(state: AgentState):
last = state["messages"][-1]
return "tools" if getattr(last, "tool_calls", None) else "end"
graph = StateGraph(AgentState)
graph.add_node("agent", call_model)
graph.add_node("tools", ToolNode(tools))
graph.add_edge(START, "agent")
graph.add_conditional_edges(
"agent", should_continue, {"tools": "tools", "end": END}
)
graph.add_edge("tools", "agent")
return graph.compile(checkpointer=app.checkpointer())
app.run()
import "dotenv/config";
import { BaseMessage } from "@langchain/core/messages";
import { Annotation, END, START, StateGraph } from "@langchain/langgraph";
import { ToolNode } from "@langchain/langgraph/prebuilt";
import { ChatOpenAI } from "@langchain/openai";
import { App } from "@mongodb-js/agent-engine-sdk-langgraph";
export const app = new App({ appName: "my-mcp-agent" });
const AgentStateAnnotation = Annotation.Root({
messages: Annotation<BaseMessage[]>({
reducer: (left, right) => left.concat(right),
default: () => [],
}),
});
type AgentState = typeof AgentStateAnnotation.State;
export const buildAgent = app.entrypoint(() => {
const llm = app.llm(new ChatOpenAI({ model: "gpt-4o-mini" }));
const tools = [...app.getTools()];
const llmWithTools = llm.bindTools([...app.getToolSchemas()]);
const callModel = async (state: AgentState) => {
const response = await llmWithTools.invoke(state.messages);
return { messages: [response] };
};
const shouldContinue = (state: AgentState) => {
const last = state.messages[state.messages.length - 1];
const toolCalls = (last as { tool_calls?: unknown[] }).tool_calls;
return Array.isArray(toolCalls) && toolCalls.length > 0
? "tools"
: END;
};
return new StateGraph(AgentStateAnnotation)
.addNode("agent", callModel)
.addNode("tools", new ToolNode(tools))
.addEdge(START, "agent")
.addConditionalEdges("agent", shouldContinue, {
tools: "tools",
[END]: END,
})
.addEdge("tools", "agent")
.compile({ checkpointer: app.checkpointer() });
});
app.run();

Establezca el campo language en su archivo agent.yaml al valor typescript y apunte el campo entrypoint al objeto app exportado, como en el valor remote_mcp_ts.github:app.

El nombre del servidor es una clave en la sección mcp.servers. Un nombre puede contener hasta 128 caracteres de texto imprimible codificado en UTF-8, incluidos caracteres no ASCII y nombres con puntos. Un nombre no puede estar vacío ni contener los siguientes elementos:

  • Texto solo con espacios en blanco

  • Espacio en blanco inicial o final

  • Caracteres de control, de ancho cero, de marca de orden de bytes (BOM) o bidireccionales

  • Separadores de ruta (/ o \)

  • ..

El comando agentengine agent validate valida los nombres según estas reglas. Para obtener más información, consulte Validar configuración.

La siguiente tabla describe los campos disponibles en la sección mcp.servers de su archivo agent.yaml:

Campo
Tipo
Requerido
Descripción

mcp.servers.<name>

Objeto

no

Define una conexión de servidor MCP con nombre. Este nombre se utiliza como identificador del servidor al ejecutar el comando agentengine dev mcp auth login <name>. Para consultar los requisitos de nomenclatura, vea la sección Reglas de nomenclatura del servidor.

mcp.servers.<name>.transport

string

no

Protocolo de transporte para la conexión MCP. Actualmente, el único valor admitido es streamable_http. Este es también el valor predeterminado.

mcp.servers.<name>.url

string

Sí

URL del punto final del servidor MCP remoto. Debe especificar una URL absoluta http o https. Si el campo auth.type tiene un valor distinto de none, la URL debe usar https.

mcp.servers.<name>.headers

mapa[cadena, cadena]

no

Encabezados HTTP estáticos que se incluirán en cada solicitud al servidor MCP. Úselos para opciones específicas del servidor, como el filtrado de los conjuntos de herramientas disponibles.

mcp.servers.<name>.auth.type

string

no

Tipo de autenticación. Los valores aceptados son none, bearer_env, oauth y client_credentials. El valor predeterminado es none.

mcp.servers.<name>.auth.token_env

string

cuando auth.type es bearer_env

Nombre de la variable de entorno que contiene el token de portador. La variable debe estar configurada en su archivo .env.

mcp.servers.<name>.auth.scope

string

no

Ámbitos OAuth separados por espacios para solicitar. Puede configurar este campo solo cuando auth.type esté configurado como oauth o client_credentials.

mcp.servers.<name>.auth.client_name

string

no

Nombre legible para el cliente OAuth. Algunos servidores muestran este nombre en la pantalla de consentimiento de autorización. Este campo solo se puede configurar cuando auth.type está configurado como oauth.

mcp.servers.<name>.auth.redirect_uri

string

no

URI de redireccionamiento de bucle invertido utilizada por el inicio de sesión interactivo de OAuth. Este campo solo se puede configurar cuando auth.type está configurado como oauth.

mcp.servers.<name>.auth.client_id_env

string

Sí, si auth.type se establece en client_credentials.

Nombre de la variable de entorno que contiene el ID del cliente OAuth.

mcp.servers.<name>.auth.client_secret_env

string

Sí, si auth.type se establece en client_credentials.

Nombre de la variable de entorno que almacena el secreto del cliente OAuth.

mcp.servers.<name>.auth.token_url

string

no

Punto final de token OAuth utilizado para solicitar un token de acceso para la autenticación de credenciales de cliente. Debe especificar una URL absoluta https. Este campo solo se puede configurar cuando auth.type es client_credentials.

mcp.servers.<name>.allowed_tools

list[string]

no

Lista de herramientas MCP remotas permitidas para el agente. Al configurarla, la plataforma registra solo las herramientas indicadas e ignora las demás que devuelve el servidor. Si se omite, la plataforma muestra todas las herramientas que devuelve el servidor. Utilice este campo para limitar la superficie de herramientas a las que su agente requiere.

mcp.servers.<name>.timeout_seconds

Int

no

Tiempo de espera de solicitud en segundos aplicado a cada llamada a la herramienta MCP. El valor predeterminado es 30.

Puedes definir varios servidores dentro de la sección mcp.servers en un único archivo agent.yaml. El motor del agente Atlas se conecta a todos los servidores configurados al iniciarse e integra sus herramientas en la interfaz del agente. El siguiente ejemplo conecta simultáneamente los servidores GitHub, Sentry y Glean en un único archivo agent.yaml:

mcp:
servers:
github:
transport: streamable_http
url: https://api.githubcopilot.com/mcp/
headers:
X-MCP-Readonly: "true"
X-MCP-Toolsets: repos,issues,pull_requests,actions
auth:
type: bearer_env
token_env: GITHUB_MCP_TOKEN
timeout_seconds: 30
sentry:
transport: streamable_http
url: https://mcp.sentry.dev/mcp
auth:
type: oauth
scope: "org:read project:read team:read event:read"
timeout_seconds: 30
glean:
transport: streamable_http
url: https://mongodb-be.glean.com/mcp/default
auth:
type: oauth
scope: "SEARCH DOCUMENTS ENTITIES"
client_name: My Glean MCP Agent
timeout_seconds: 30

Cuando te conectas a varios servidores con autenticación OAuth, debes ejecutar el comando agentengine dev mcp auth login <name> para cada servidor OAuth antes de iniciar el entorno. El siguiente ejemplo muestra los comandos que debes ejecutar desde el directorio de tu proyecto de agente para autenticarte con los servidores Sentry y Glean antes de iniciar el entorno:

agentengine dev mcp auth login sentry
agentengine dev mcp auth login glean
agentengine dev up

El archivo .env y la caché local de tokens OAuth solo están disponibles durante el desarrollo local con el comando agentengine dev up. Antes de implementar el agente, debe aprovisionar las credenciales de MCP como secretos del espacio de trabajo para que el entorno de ejecución implementado pueda autenticarse con cada servidor MCP.

Las siguientes secciones describen cómo aprovisionar secretos para cada tipo de autenticación. Para obtener más información sobre el aprovisionamiento de secretos, consulte la guía «Aprovisionamiento de secretos en la nube».

Para cada servidor autenticado por portador, configure la variable de entorno del token como un secreto de espacio de trabajo. Utilice el siguiente comando para configurar el secreto e incluya la bandera --workspace-scope para apuntar al espacio de trabajo actual:

agentengine secret set GITHUB_MCP_TOKEN --workspace-scope

Para aprovisionar el secreto y sincronizarlo con las implementaciones en ejecución en un solo paso, utilice la bandera --sync:

agentengine secret set GITHUB_MCP_TOKEN --workspace-scope --sync

Ejecute este comando para cada servidor autenticado mediante bearer antes de la implementación.

Para cada servidor OAuth, cargue la caché de tokens local en el espacio de trabajo utilizando el comando agentengine dev mcp auth upload:

agentengine dev mcp auth upload sentry

Para cargar y sincronizar con implementaciones en ejecución en un solo paso, utilice la bandera --sync:

agentengine dev mcp auth upload sentry --sync

Ejecute este comando para cada servidor OAuth antes de la implementación.

Una vez que su agente esté conectado a los servidores MCP remotos, puede probarlo localmente y luego implementarlo. Para obtener más información sobre cómo probar su agente localmente e implementarlo, consulte las siguientes guías en la documentación de Atlas Agent Engine: