Estou pesquisando sobre MCP utilizando o stack Python + FastAPI + FastMCP e desenvolvi diversos servidores MCP locais. Durante a preparação para deploy, encontrei o mcp-use, que simplifica a hospedagem e gerenciamento de servidores MCP.
O mcp-use é uma biblioteca Python open source que conecta qualquer LLM a servidores MCP, eliminando dependências de clientes proprietários. Esta ferramenta resolve os desafios de integração de ferramentas na construção de agentes de IA, permitindo que desenvolvedores conectem LLMs a funcionalidades como navegação web e manipulação de arquivos.
O que é mcp-use
O mcp-use é uma ponte entre LLMs e servidores MCP, habilitando a criação de agentes customizados com acesso a ferramentas externas.
Principais vantagens
- Código aberto: Sem dependências de soluções fechadas
- Compatibilidade: Funcionna com provedores LangChain (OpenAI, Anthropic, Groq)
- Configuração simples: JSON para conectar servidores MCP
- API intuitiva: Cria agentes com poucas linhas de código
Funcionalidades
Flexibilidade de modelos
- Suporte aos principais modelos de linguagem
Opções de conexão
- Stdio: Entrada e saída padrão
- HTTP: Conexão a portas específicas
- SSE: Eventos do sevridor
- Sandbox: Execução via E2B
Recursos avançados
- Múltiplos servidores simultâneos
- Seleção dinâmica de servidor
- Controle de acesso a ferramentas
- Streaming de execução
- Modo debug detalhado
Gerenciamento de configuração
- Arquivos JSON
- Dicionários Python
- Variáveis de ambiente
- Opções flexíveis de servidor
Como usar mcp-use
Instalação
pip install mcp-use
pip install langchain-openai
pip install langchain-anthropic
pip install "mcp-use[e2b]"
Exemplo básico
import asyncio
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from mcp_use import MCPAgent, MCPClient
async def main():
load_dotenv()
config = {
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {"DISPLAY": ":1"}
}
}
}
client = MCPClient.from_dict(config)
llm = ChatOpenAI(model="gpt-4o")
agent = MCPAgent(llm=llm, client=client, max_steps=30)
resultado = await agent.run(
"Quais são as comidas típicas de São Paulo?"
)
print(f"Resultado: {resultado}")
if __name__ == "__main__":
asyncio.run(main())
Usando arquivo de configuração
Crie mcp-config.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {"DISPLAY": ":1"}
},
"airbnb": {
"command": "npx",
"args": ["-y", "@openbnb/mcp-server-airbnb"]
}
}
}
Carregue no código:
client = MCPClient.from_config_file("mcp-config.json")
Streaming de saída
async for chunk in agent.astream("O que visitar no Rio de Janeiro?"):
print(chunk["messages"], end="", flush=True)
Controle de acesso a ferramentas
agent = MCPAgent(
llm=llm,
client=client,
disallowed_tools=["get_Personal"]
)
Modo debug
import mcp_use
mcp_use.set_debug(2)