Close Menu
    Facebook X (Twitter) Instagram
    • Privacy Policy
    • Terms Of Service
    • Social Media Disclaimer
    • DMCA Compliance
    • Anti-Spam Policy
    Facebook X (Twitter) Instagram
    Fintech Fetch
    • Home
    • Crypto News
      • Bitcoin
      • Ethereum
      • Altcoins
      • Blockchain
      • DeFi
    • AI News
    • Stock News
    • Learn
      • AI for Beginners
      • AI Tips
      • Make Money with AI
    • Reviews
    • Tools
      • Best AI Tools
      • Crypto Market Cap List
      • Stock Market Overview
      • Market Heatmap
    • Contact
    Fintech Fetch
    Home»AI News»How to Design a Production-Ready AI Agent That Automates Google Colab Workflows Using Colab-MCP, MCP Tools, FastMCP, and Kernel Execution
    How to Design a Production-Ready AI Agent That Automates Google Colab Workflows Using Colab-MCP, MCP Tools, FastMCP, and Kernel Execution
    AI News

    How to Design a Production-Ready AI Agent That Automates Google Colab Workflows Using Colab-MCP, MCP Tools, FastMCP, and Kernel Execution

    March 24, 20266 Mins Read
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Customgpt
    import asyncio
    import json
    import io
    import contextlib
    import re
    from dataclasses import dataclass
    from typing import Callable, Awaitable
    import nest_asyncio
    nest_asyncio.apply()

    TOOL_DEFINITIONS = [
    {
    “name”: “execute_code”,
    “description”: “Execute Python code in the Colab kernel. Returns stdout, results, or errors. State persists between calls.”,
    “parameters”: {
    “type”: “object”,
    “properties”: {
    “code”: {“type”: “string”, “description”: “Python code to execute”},
    },
    “required”: [“code”],
    }
    },
    {
    “name”: “add_code_cell”,
    “description”: “Add a code cell to the notebook at a given index.”,
    “parameters”: {
    “type”: “object”,
    “properties”: {
    “cell_index”: {“type”: “integer”, “description”: “Position to insert”},
    “code”: {“type”: “string”, “description”: “Python code for the cell”},
    },
    “required”: [“cell_index”, “code”],
    }
    },
    {
    “name”: “add_text_cell”,
    “description”: “Add a markdown documentation cell to the notebook.”,
    “parameters”: {
    “type”: “object”,
    “properties”: {
    “cell_index”: {“type”: “integer”, “description”: “Position to insert”},
    “content”: {“type”: “string”, “description”: “Markdown content”},
    },
    “required”: [“cell_index”, “content”],
    }
    },
    {
    “name”: “get_cells”,
    “description”: “Retrieve current notebook cells and their outputs.”,
    “parameters”: {
    “type”: “object”,
    “properties”: {
    “cell_index_start”: {“type”: “integer”, “description”: “Start index”, “default”: 0},
    “include_outputs”: {“type”: “boolean”, “description”: “Include cell outputs”, “default”: True},
    },
    “required”: [],
    }
    },
    ]

    class NotebookState:

    def __init__(self):
    self.cells: list[dict] = []
    self.execution_ns: dict = {“__builtins__”: __builtins__}

    def add_code_cell(self, index: int, code: str) -> dict:
    cell = {“type”: “code”, “source”: code, “outputs”: [], “executed”: False}
    self.cells.insert(min(index, len(self.cells)), cell)
    return {“status”: “ok”, “cell_count”: len(self.cells)}

    bybit

    def add_text_cell(self, index: int, content: str) -> dict:
    cell = {“type”: “markdown”, “source”: content}
    self.cells.insert(min(index, len(self.cells)), cell)
    return {“status”: “ok”, “cell_count”: len(self.cells)}

    def execute_code(self, code: str) -> dict:
    stdout_buf = io.StringIO()
    try:
    with contextlib.redirect_stdout(stdout_buf):
    try:
    result = eval(code, self.execution_ns)
    if result is not None:
    return {“outputs”: [{“type”: “result”, “text”: repr(result)}]}
    except SyntaxError:
    exec(code, self.execution_ns)
    out = stdout_buf.getvalue()
    return {“outputs”: [{“type”: “stdout”, “text”: out}] if out else []}
    except Exception as e:
    return {“outputs”: [{“type”: “error”, “text”: f”{type(e).__name__}: {e}”}]}

    def get_cells(self, start: int = 0, include_outputs: bool = True) -> dict:
    return {“cells”: self.cells[start:], “total”: len(self.cells)}

    class MCPAgentLoop:

    def __init__(self):
    self.notebook = NotebookState()
    self.history: list[dict] = []
    self.max_iterations = 10

    def _dispatch_tool(self, name: str, args: dict) -> dict:
    if name == “execute_code”:
    return self.notebook.execute_code(args[“code”])
    elif name == “add_code_cell”:
    return self.notebook.add_code_cell(args[“cell_index”], args[“code”])
    elif name == “add_text_cell”:
    return self.notebook.add_text_cell(args[“cell_index”], args[“content”])
    elif name == “get_cells”:
    return self.notebook.get_cells(
    args.get(“cell_index_start”, 0),
    args.get(“include_outputs”, True),
    )
    else:
    return {“error”: f”Unknown tool: {name}”}

    def _plan(self, task: str, iteration: int, last_result: dict = None) -> list[dict]:
    task_lower = task.lower()

    if iteration == 0:
    return [
    {“tool”: “add_text_cell”, “args”: {
    “cell_index”: 0,
    “content”: f”# AI-Generated Analysis\n\n**Task**: {task}\n\n”
    f”*Generated by MCP Agent*”
    }},
    ]
    elif iteration == 1:
    return [
    {“tool”: “add_code_cell”, “args”: {
    “cell_index”: 1,
    “code”: “import random\nimport math\n\n”
    “# Generate sample data\n”
    “random.seed(42)\n”
    “data = [random.gauss(100, 15) for _ in range(500)]\n”
    “print(f’Generated {len(data)} data points’)\n”
    “print(f’Sample: {data[:5]}’)”
    }},
    {“tool”: “execute_code”, “args”: {
    “code”: “import random\nimport math\n\n”
    “random.seed(42)\n”
    “data = [random.gauss(100, 15) for _ in range(500)]\n”
    “print(f’Generated {len(data)} data points’)\n”
    “print(f’Sample: {[round(x,2) for x in data[:5]]}’)”
    }},
    ]
    elif iteration == 2:
    return [
    {“tool”: “add_code_cell”, “args”: {
    “cell_index”: 2,
    “code”: “# Statistical analysis\n”
    “mean = sum(data) / len(data)\n”
    “variance = sum((x – mean)**2 for x in data) / len(data)\n”
    “std = variance ** 0.5\n”
    “median = sorted(data)[len(data)//2]\n”
    “print(f’Mean: {mean:.2f}’)\n”
    “print(f’Std Dev: {std:.2f}’)\n”
    “print(f’Median: {median:.2f}’)”
    }},
    {“tool”: “execute_code”, “args”: {
    “code”: “mean = sum(data) / len(data)\n”
    “variance = sum((x – mean)**2 for x in data) / len(data)\n”
    “std = variance ** 0.5\n”
    “median = sorted(data)[len(data)//2]\n”
    “print(f’Mean: {mean:.2f}’)\n”
    “print(f’Std Dev: {std:.2f}’)\n”
    “print(f’Median: {median:.2f}’)”
    }},
    ]
    elif iteration == 3:
    return [
    {“tool”: “add_text_cell”, “args”: {
    “cell_index”: 3,
    “content”: “## Results Summary\n\n”
    “The analysis is complete. Key findings are computed above.”
    “The data follows a normal distribution centered around 100.”
    }},
    ]
    else:
    return []

    async def run(self, task: str):
    print(f”๐Ÿค– Agent Task: {task}”)
    print(“=” * 60)

    for i in range(self.max_iterations):
    plan = self._plan(task, i)
    if not plan:
    print(f”\n๐Ÿ Agent finished after {i} iterations”)
    break

    print(f”\n— Iteration {i+1} —“)

    for step in plan:
    tool_name = step[“tool”]
    tool_args = step[“args”]

    print(f” ๐Ÿ”ง Calling: {tool_name}”)
    result = self._dispatch_tool(tool_name, tool_args)

    self.history.append({
    “iteration”: i,
    “tool”: tool_name,
    “result”: result,
    })

    if “outputs” in result:
    for out in result[“outputs”]:
    prefix = “๐Ÿ“ค” if out[“type”] != “error” else “โš ๏ธ”
    text = out[“text”][:200]
    print(f” {prefix} {text}”)
    elif “status” in result:
    print(f” โœ… {result}”)

    print(f”\n๐Ÿ““ Final Notebook State:”)
    print(“=” * 60)
    for i, cell in enumerate(self.notebook.cells):
    icon = “๐Ÿ’ป” if cell[“type”] == “code” else “๐Ÿ“”
    source = cell[“source”][:60] + (“…” if len(cell[“source”]) > 60 else “”)
    print(f” [{i}] {icon} {cell[‘type’]:10s} | {source}”)

    agent = MCPAgentLoop()
    asyncio.run(agent.run(“Analyze a dataset with descriptive statistics”))

    INTEGRATION_TEMPLATE = ”’
    import anthropic
    import json

    client = anthropic.Anthropic()

    tools = [
    {
    “name”: “colab-proxy-mcp_add_code_cell”,
    “description”: “Add a Python code cell to the connected Colab notebook”,
    “input_schema”: {
    “type”: “object”,
    “properties”: {
    “cellIndex”: {“type”: “integer”},
    “code”: {“type”: “string”},
    “language”: {“type”: “string”, “default”: “python”},
    },
    “required”: [“cellIndex”, “code”],
    }
    },
    {
    “name”: “colab-proxy-mcp_add_text_cell”,
    “description”: “Add a markdown cell to the connected Colab notebook”,
    “input_schema”: {
    “type”: “object”,
    “properties”: {
    “cellIndex”: {“type”: “integer”},
    “content”: {“type”: “string”},
    },
    “required”: [“cellIndex”, “content”],
    }
    },
    {
    “name”: “colab-proxy-mcp_execute_cell”,
    “description”: “Execute a cell in the connected Colab notebook”,
    “input_schema”: {
    “type”: “object”,
    “properties”: {
    “cellIndex”: {“type”: “integer”},
    },
    “required”: [“cellIndex”],
    }
    },
    {
    “name”: “colab-proxy-mcp_get_cells”,
    “description”: “Get cells from the connected Colab notebook”,
    “input_schema”: {
    “type”: “object”,
    “properties”: {
    “cellIndexStart”: {“type”: “integer”, “default”: 0},
    “includeOutputs”: {“type”: “boolean”, “default”: True},
    },
    }
    },
    {
    “name”: “runtime_execute_code”,
    “description”: “Execute Python code directly in the Colab kernel (Runtime Mode)”,
    “input_schema”: {
    “type”: “object”,
    “properties”: {
    “code”: {“type”: “string”},
    },
    “required”: [“code”],
    }
    },
    ]

    def run_agent(task: str, max_turns: int = 15):
    messages = [{“role”: “user”, “content”: task}]

    for turn in range(max_turns):
    response = client.messages.create(
    model=”claude-sonnet-4-20250514″,
    max_tokens=4096,
    tools=tools,
    messages=messages,
    system=”You are an AI assistant with access to a Google Colab notebook.”
    “via MCP tools. Build notebooks step by step: add markdown cells ”
    “For documentation, add code cells, then execute them. ”
    “Inspect outputs and fix errors iteratively.”
    )

    assistant_content = response.content
    messages.append({“role”: “assistant”, “content”: assistant_content})

    if response.stop_reason == “end_turn”:
    print(“Agent finished.”)
    break

    tool_results = []
    for block in assistant_content:
    if block.type == “tool_use”:
    print(f”Tool call: {block.name}({json.dumps(block.input)[:100]})”)

    result = dispatch_to_mcp_server(block.name, block.input)

    tool_results.append({
    “type”: “tool_result”,
    “tool_use_id”: block.id,
    “content”: json.dumps(result),
    })

    if tool_results:
    messages.append({“role”: “user”, “content”: tool_results})
    else:
    break

    def dispatch_to_mcp_server(tool_name: str, tool_input: dict) -> dict:
    raise NotImplementedError(“Use the MCP SDK for real tool dispatch”)
    ”’

    print(INTEGRATION_TEMPLATE)
    print(“\n” + “=” * 60)
    print(“๐Ÿ’ก The template above shows how to connect a real LLM to colab-mcp.”)
    print(” For Claude Code: just add the MCP config and start chatting!”)
    print(” For custom agents: use the Anthropic SDK with tool_use.”)

    10web
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Fintech Fetch Editorial Team
    • Website

    Related Posts

    logo

    Digital Detox & Screen Time Statistics 2025

    March 23, 2026
    Whatโ€™s the right path for AI? | MIT News

    Whatโ€™s the right path for AI? | MIT News

    March 22, 2026
    Three ways AI is learning to understand the physical world

    Three ways AI is learning to understand the physical world

    March 21, 2026
    Visa prepares payment systems for AI agent-initiated transactions

    Visa prepares payment systems for AI agent-initiated transactions

    March 20, 2026
    Add A Comment

    Comments are closed.

    Join our email newsletter and get news & updates into your inbox for free.


    Privacy Policy

    Thanks! We sent confirmation message to your inbox.

    livechat
    Latest Posts
    Small-cap Russell 2000 enters correction territory

    Small-cap Russell 2000 Index Drops into Correction Range

    March 24, 2026
    How to Design a Production-Ready AI Agent That Automates Google Colab Workflows Using Colab-MCP, MCP Tools, FastMCP, and Kernel Execution

    How to Design a Production-Ready AI Agent That Automates Google Colab Workflows Using Colab-MCP, MCP Tools, FastMCP, and Kernel Execution

    March 24, 2026
    How to Make Money With AI in 2026 (Beginner Friendly)

    How to Make Money With AI in 2026 (Beginner Friendly)

    March 23, 2026
    Anthropic AI Academy WIPES OUT $497/Month AI Courses ๐Ÿ’€ (Beginners Are Winning For $0)

    Anthropic AI Academy WIPES OUT $497/Month AI Courses ๐Ÿ’€ (Beginners Are Winning For $0)

    March 23, 2026
    10 AI Hacks That Save 10 Hours a Week

    10 AI Hacks That Save 10 Hours a Week

    March 23, 2026
    changelly
    LEGAL INFORMATION
    • Privacy Policy
    • Terms Of Service
    • Social Media Disclaimer
    • DMCA Compliance
    • Anti-Spam Policy
    Top Insights
    Aave DAO Supports V4 Rollout Plan in Snapshot Vote

    Aave DAO Supports V4 Rollout Plan in Snapshot Vote

    March 24, 2026
    Strategy Unveils New $44B Plan to Fund Bitcoin Purchases

    Strategy Reveals New $44 Billion Initiative to Finance Bitcoin Acquisitions

    March 24, 2026
    livechat
    Facebook X (Twitter) Instagram Pinterest
    © 2026 FintechFetch.com - All rights reserved.

    Type above and press Enter to search. Press Esc to cancel.