import os
import dotenv
dotenv.load_dotenv()
from e2b import AsyncSandbox
import asyncio
from datetime import timedelta
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
sandbox = await AsyncSandbox.create(
mcp={
"browserbase": {
"apiKey": os.environ["BROWSERBASE_API_KEY"],
"geminiApiKey": os.environ["GEMINI_API_KEY"],
"projectId": os.environ["BROWSERBASE_PROJECT_ID"],
},
"exa": {
"apiKey": os.environ["EXA_API_KEY"],
},
"notion": {
"internalIntegrationToken": os.environ["NOTION_API_KEY"],
},
}
)
async with streamablehttp_client(
url=sandbox.get_mcp_url(),
headers={"Authorization": f"Bearer {await sandbox.get_mcp_token()}"},
timeout=timedelta(seconds=600)
) as (read_stream, write_stream, _):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await sandbox.kill()
if __name__ == "__main__":
asyncio.run(main())