LangChain / LangGraph
Conecte um agente LangChain ou LangGraph (Python ou JS) ao Edison Watch usando langchain-mcp-adapters.
LangChain e LangGraph se conectam ao Edison através do MultiServerMCPClient do langchain-mcp-adapters, que transforma ferramentas MCP em ferramentas nativas do LangChain. Sua URL de conexão carrega sua chave de API, portanto nenhum cabeçalho de autenticação é necessário.
pip install langchain-mcp-adapters langgraph "langchain[openai]"import asyncio
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent
async def main() -> None:
client = MultiServerMCPClient({
"edison": {
"transport": "streamable_http",
"url": os.environ["EDISON_MCP_URL"],
}
})
tools = await client.get_tools()
agent = create_agent("openai:gpt-5.6-luna", tools)
result = await agent.ainvoke({"messages": "List my available tools."})
print(result["messages"][-1].content)
asyncio.run(main())Defina EDISON_MCP_URL com sua URL de conexão, por exemplo https://mcp.edison.watch/mcp/<your-api-key>/?client=langchain.
npm install @langchain/mcp-adapters @langchain/langgraph @langchain/core @langchain/openai langchainUma entrada de servidor com apenas uma url usa Streamable HTTP por padrão (com fallback automático para SSE). Desative o fallback para fixar no transporte que o Edison serve:
import { createAgent } from "langchain";
import { ChatOpenAI } from "@langchain/openai";
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
const client = new MultiServerMCPClient({
mcpServers: {
edison: {
url: process.env.EDISON_MCP_URL!,
automaticSSEFallback: false,
},
},
});
const tools = await client.getTools();
const agent = createAgent({ model: new ChatOpenAI({ model: "gpt-5.6-luna" }), tools });
const res = await agent.invoke({
messages: [{ role: "user", content: "List my available tools." }],
});
console.log(res);
await client.close();Opcional: o cabeçalho de segredos criptografados
Para servidores com segredos com criptografia zero-knowledge, adicione uma entrada headers (apenas os transportes http/sse respeitam cabeçalhos em tempo de execução):
"edison": {
"transport": "streamable_http",
"url": os.environ["EDISON_MCP_URL"],
"headers": {"x-edison-secret-key": os.environ["EDISON_SECRET_KEY"]},
}edison: {
url: process.env.EDISON_MCP_URL!,
automaticSSEFallback: false,
headers: { "x-edison-secret-key": process.env.EDISON_SECRET_KEY! },
}
