DSPy
Conecta un programa DSPy a Edison Watch usando el SDK Python de MCP y dspy.Tool.from_mcp_tool.
DSPy no incluye un objeto MCP remoto dedicado - configuras una ClientSession MCP básica a través del streamablehttp_client del SDK oficial de Python, luego conviertes cada herramienta con dspy.Tool.from_mcp_tool. Tu URL de conexión lleva tu clave API, por lo que no se necesita cabecera de autenticación.
pip install dspy mcpimport asyncio
import os
import dspy
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
dspy.configure(lm=dspy.LM("openai/gpt-5.6-luna"))
class Assistant(dspy.Signature):
"""Answer the user request using the available tools."""
request: str = dspy.InputField()
answer: str = dspy.OutputField()
async def main() -> None:
url = os.environ["EDISON_MCP_URL"]
async with streamablehttp_client(url) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
dspy_tools = [dspy.Tool.from_mcp_tool(session, t) for t in tools.tools]
react = dspy.ReAct(Assistant, tools=dspy_tools)
result = await react.acall(request="List my available tools.")
print(result.answer)
asyncio.run(main())Establece EDISON_MCP_URL con tu URL de conexión, p. ej. https://mcp.edison.watch/mcp/<your-api-key>/?client=dspy.
streamablehttp_client produce una 3-tupla (read, write, get_session_id) - no la 2-tupla que obtienes de stdio_client. Descarta el tercer valor como _. Copiar un ejemplo de stdio y desempaquetar dos valores es un error común. Las herramientas MCP son asíncronas, así que conduce el programa con react.acall(...).
Opcional: la cabecera de secretos cifrados
Para servidores con secretos cifrados de conocimiento cero, pasa headers a streamablehttp_client:
async with streamablehttp_client(
url,
headers={"x-edison-secret-key": os.environ["EDISON_SECRET_KEY"]},
) as (read, write, _):
...
