Skip to main content
Glama

humanizer_type

Simulate human typing patterns by modeling keystroke timing, including variable delays, word pauses, and optional typos with corrections, to make automated text input appear natural.

Instructions

Type text with human-like keystroke timing. Models per-character delays based on WPM, bigram frequency, shift penalty, word boundary pauses, and optional typo injection with backspace correction.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
target_idYesChrome target ID from interceptor_chrome_launch
textYesText to type
wpmNoTyping speed in words per minute (default: 40)
error_rateNoTypo probability per character, 0-1 (default: 0)

Implementation Reference

  • The MCP tool registration and handler implementation for "humanizer_type".
    server.tool(
      "humanizer_type",
      "Type text with human-like keystroke timing. " +
      "Models per-character delays based on WPM, bigram frequency, shift penalty, " +
      "word boundary pauses, and optional typo injection with backspace correction.",
      {
        target_id: z.string().describe("Chrome target ID from interceptor_chrome_launch"),
        text: z.string().describe("Text to type"),
        wpm: z.number().optional().default(40)
          .describe("Typing speed in words per minute (default: 40)"),
        error_rate: z.number().optional().default(0)
          .describe("Typo probability per character, 0-1 (default: 0)"),
      },
      async ({ target_id, text, wpm, error_rate }) => {
        try {
          const result = await humanizerEngine.typeText(target_id, text, {
            wpm,
            errorRate: error_rate,
          });
          return {
            content: [{
              type: "text",
              text: JSON.stringify({
                status: "success",
                target_id,
                action: "type",
                text_length: text.length,
                stats: {
                  total_ms: result.totalMs,
                  events_dispatched: result.eventsDispatched,
                  chars_typed: result.charsTyped,
                  effective_wpm: text.length > 0
                    ? Math.round((text.length / 5) / (result.totalMs / 60_000))
                    : 0,
                },
              }),
            }],
          };
        } catch (e) {
          return {
            content: [{
              type: "text",
              text: JSON.stringify({ status: "error", target_id, action: "type", error: errorToString(e) }),
            }],
          };
        }
      },
    );
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/yfe404/proxy-mcp'

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