Skip to main content
Glama

type

Enter text at the current cursor position in the browser, with an option to press Enter after typing.

Instructions

Type text at the current focus position

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesText to type
submitNoPress Enter after typing (default: false)

Implementation Reference

  • The main handler implementation for the 'type' tool. It types text at the current focus position with optional submission, validates inputs, and returns an observation result after typing.
    def _type(self, text: str = None, submit: bool = False, **_) -> BrowserResult:
        """Type text at current focus"""
        if not text:
            return BrowserResult(success=False, error="text required")
        
        if self._page is None:
            return BrowserResult(success=False, error="No page open")
        
        try:
            self._human_type(text)
            
            if submit:
                if self._humanize:
                    time.sleep(random.uniform(0.1, 0.3))
                self._page.keyboard.press("Enter")
                
                try:
                    self._page.wait_for_load_state("networkidle", timeout=5000)
                except:
                    pass
                self._page.wait_for_timeout(1000)
            else:
                self._page.wait_for_timeout(500)
            
            return self._observe()
            
        except Exception as e:
            return BrowserResult(
                success=False,
                error=f"Type failed: {str(e)}"
            )
  • Helper method that performs humanized typing with randomized delays between characters to simulate natural typing patterns.
    def _human_type(self, text: str):
        """Humanized typing"""
        if not self._humanize:
            self._page.keyboard.type(text)
            return
        
        for i, char in enumerate(text):
            delay = random.uniform(0.05, 0.15)
            
            if random.random() < 0.1:
                delay += random.uniform(0.15, 0.4)
            
            if i > 0 and text[i-1] == ' ':
                delay += random.uniform(0.05, 0.15)
            
            self._page.keyboard.type(char)
            time.sleep(delay)
  • Tool schema definition for the 'type' tool, defining input parameters (text and optional submit boolean) and their types.
    Tool(
        name="type",
        description="Type text at the current focus position",
        inputSchema={
            "type": "object",
            "properties": {
                "text": {
                    "type": "string",
                    "description": "Text to type"
                },
                "submit": {
                    "type": "boolean",
                    "description": "Press Enter after typing (default: false)",
                    "default": False
                }
            },
            "required": ["text"]
        }
    ),
  • Tool registration handler that routes 'type' tool calls to the browser.execute method with appropriate arguments.
    elif name == "type":
        result = await asyncio.to_thread(
            browser.execute,
            action="type",
            text=arguments.get("text"),
            submit=arguments.get("submit", False)
        )
  • Action mapping that registers the 'type' action name to its handler method _type within the execute method.
    actions = {
        "navigate": self._navigate,
        "observe": self._observe,
        "click": self._click,
        "multi_click": self._multi_click,
        "type": self._type,
        "scroll": self._scroll,
        "close": self._close
    }
Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LingTravel/Atlas-Browser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server