Skip to main content

Configuración de Servidores STDIO

Los servidores STDIO ejecutan procesos locales que se comunican con DeepSeek MCP Client a través de entrada/salida estándar.

Configuración Básica

Comando con Diccionario

from deepseek_mcp_client import DeepSeekClient
import asyncio

async def main():
client = DeepSeekClient(
model='deepseek-chat',
mcp_servers=[{
'command': 'python',
'args': ['mi_servidor.py']
}]
)

result = await client.execute('¿Qué herramientas tienes disponibles?')
print(result.output)

await client.close()

asyncio.run(main())

Detección Automática por Extensión

# Detecta automáticamente Python STDIO
client = DeepSeekClient(
model='deepseek-chat',
mcp_servers=['servidor.py'] # .py -> comando 'python'
)

# Detecta automáticamente Node.js STDIO
client = DeepSeekClient(
model='deepseek-chat',
mcp_servers=['servidor.js'] # .js -> comando 'node'
)

Opciones de Configuración

Parámetros Disponibles

server_config = {
'command': 'python', # Comando a ejecutar (requerido)
'args': ['servidor.py'], # Argumentos del comando
'env': {}, # Variables de entorno
'cwd': '/path/to/directory', # Directorio de trabajo
'timeout': 60.0, # Timeout en segundos (None = sin límite)
'keep_alive': True # Mantener proceso activo
}

Ejemplo del Proyecto

Basado en example_stdio/example_stdio.py:

from deepseek_mcp_client import DeepSeekClient
import asyncio

async def main():
agent = DeepSeekClient(
model='deepseek-chat',
system_prompt='Eres un asistente especializado en e-commerce.',
mcp_servers=[{
'command': 'uv',
'args': [
'run',
'--directory', '/path/to/project',
'python', 'main.py'
],
'env': {
'MERCADOLIBRE_ENV': 'production',
'MERCADOLIBRE_HEADLESS': 'true',
'LOG_LEVEL': 'INFO'
},
'timeout': None # Sin límite para scraping
}],
enable_logging=True,
enable_progress=True
)

try:
result = await agent.execute('Busca laptops gamer económicas')

if result.success:
print(f"✅ Respuesta: {result.output}")
print(f"🛠️ Herramientas: {result.tools_used}")
else:
print(f"❌ Error: {result.error}")
finally:
await agent.close()

asyncio.run(main())

Configuración con MCPServerConfig

from deepseek_mcp_client import DeepSeekClient, MCPServerConfig

# Configuración completa con la clase
stdio_server = MCPServerConfig(
name="Mi Servidor Python",
command='python',
args=['servidor.py'],
env={'LOG_LEVEL': 'INFO'},
cwd='/path/to/server',
timeout=120.0,
keep_alive=True
)

client = DeepSeekClient(
model='deepseek-chat',
mcp_servers=[stdio_server]
)

Ejemplos de Comandos

Python

# Python básico
{'command': 'python', 'args': ['servidor.py']}

# Python con módulo
{'command': 'python', 'args': ['-m', 'mi_servidor']}

# Intérprete específico
{'command': 'python3.11', 'args': ['servidor.py']}

Node.js

# Node.js básico  
{'command': 'node', 'args': ['servidor.js']}

# Con argumentos
{'command': 'node', 'args': ['servidor.js', '--port', '3000']}

UV (Package Manager)

# UV con Python
{
'command': 'uv',
'args': ['run', 'python', 'servidor.py'],
'timeout': 120.0
}
Timeout

Usa timeout: None para procesos que pueden tomar mucho tiempo (como web scraping). Por defecto es 30 segundos.

Keep Alive

keep_alive: True mantiene el proceso ejecutándose entre llamadas. False reinicia el proceso cada vez.