How to Let an LLM Fill Forms with Vibium
Let an LLM fill forms with Vibium by connecting its built-in MCP server, then describe the form in plain English and let the model type and submit it.
You let an LLM fill forms by connecting Vibium's built-in MCP server, then describing the form in plain English. Vibium is AI-native browser automation built on WebDriver BiDi, and it ships an MCP server out of the box, so any MCP-speaking model — Claude, Gemini, and others — can drive a real Chrome browser with zero glue code. Once connected, the LLM calls Vibium's tools to open the page, locate each field by its label or placeholder, type values, and click submit. Because Vibium auto-waits for every field to become actionable, the model does not need timing hacks or retry loops. Under the hood the same flow maps to Vibium's Python and JS APIs, where vibe.find(...) plus .type() and .click() do the work. The result: you say "fill the signup form with this data," and the model carries it out in a live browser.
Why use an LLM to fill forms at all?
The point of letting an LLM fill forms is to skip hand-written selectors and let natural language drive the browser. Traditional automation breaks when a field's CSS class changes; an LLM paired with Vibium targets fields the way a person does — by the visible label, the placeholder text, or the role. That makes the instruction "enter the email in the Email field" survive layout tweaks that would shatter a brittle #form-control-2 > input selector.
This is useful for repetitive data entry, QA of signup and checkout flows, seeding test accounts, and agents that complete real tasks on the web rather than just reading pages.
How do you connect Vibium to your LLM?
Add Vibium's MCP server to your LLM client with a single command. In Claude Code:
claude mcp add vibium -- npx -y vibium mcpThen start a new session so the client re-runs tool discovery, and confirm Vibium is registered:
claude mcp listChrome for Testing downloads automatically the first time a browser launches. The full Vibium MCP in Claude Code walkthrough covers screenshot directories, headless mode, and removal. Gemini CLI uses the equivalent gemini mcp add vibium npx -y vibium mcp.
How does the LLM actually fill the form?
Once connected, you describe the task and the model chains Vibium's MCP tools — navigate, find, type, click — to complete it. A prompt like this is enough:
"Open https://example.com/signup, fill the Name field with 'Ada Lovelace', the Email field with 'ada@example.com', set the plan dropdown to 'Pro', then click Create account and tell me the confirmation message."
Vibium's strength here is semantic selectors. Instead of guessing a CSS path, the model can match a field by its label, placeholder, role, or data-testid. That is what makes "the Email field" a reliable target.
What does this look like in code?
Whether the LLM drives Vibium via MCP or you script it directly, the verified Python sync API expresses the same steps. Each find() accepts a CSS selector or semantic keywords like label and placeholder:
from vibium import browser_sync as browser
vibe = browser.launch()
vibe.go("https://example.com/signup")
# Target fields by their visible label or placeholder — not brittle CSS
vibe.find(label="Name").type("Ada Lovelace")
vibe.find(label="Email").type("ada@example.com")
vibe.find(placeholder="Choose a password").type("s3cret-pass")
vibe.find(role="button", text="Create account").click()
confirmation = vibe.find(".signup-success").text()
print(confirmation)
vibe.quit()Vibium runs actionability checks server-side before each action, so it waits for every field to be visible, enabled, and editable before typing — no sleep() calls required. See how to find elements for the full selector reference and fill and submit a form for a deeper walkthrough.
How do you keep LLM form-filling reliable?
Reliable form-filling comes down to clear field references and verification. A few practices help:
- Name fields by their visible label. Tell the model "the Email field," not a CSS path, and let Vibium's semantic matching resolve it.
- Verify after submit. Ask the model to read back the success message or take a screenshot so you can confirm the form actually went through.
- Keep secrets out of prompts. Pass credentials and tokens through environment variables rather than pasting them into chat.
- Scope the task. Give one form and one set of values per request instead of open-ended access.
Next steps
Frequently asked questions
How do I let an LLM fill out a web form?
Connect Vibium's built-in MCP server to your LLM client, then describe the form in plain English. The model calls Vibium's MCP tools to open the page, find each field, type values, and submit. Vibium drives a real Chrome browser, so the form is filled exactly as a human would.
Can an LLM fill forms without me writing selectors?
Yes. Vibium supports semantic selectors that match fields by label, placeholder, role, or test ID, so an LLM can target a field by its visible label instead of a brittle CSS path. This makes natural-language instructions like 'fill the Email field' reliable across small layout changes.
Does Vibium wait for form fields to be ready?
Yes. Vibium runs server-side actionability checks before every action, so it auto-waits up to 30 seconds for a field to become visible, enabled, and editable before typing. An LLM does not need to add sleeps or retry logic to handle slow-loading or dynamic forms.
Vibium is created by Jason Huggins. This is an independent tutorial — see the official Vibium site and GitHub repo for canonical docs.
Related guides
Agentic Web Testing with Vibium
Agentic web testing with Vibium: let an AI agent explore, drive, and verify your app in a real browser via Vibium's MCP server and auto-waiting actions.
5 min read→MCP & AI AgentsHow to Build an AI Agent That Browses the Web with Vibium
Build an AI agent that browses the web with Vibium — wire its built-in MCP server to an LLM so the agent can navigate, read, click, and screenshot live pages.
5 min read→MCP & AI AgentsHow to Debug the Vibium MCP Server
Debug the Vibium MCP server: verify it starts, test JSON-RPC by hand, list tools, fix Chrome launch and zombie-process issues, and read MCP errors.
5 min read→MCP & AI AgentsHow to Give Claude Browser Access with Vibium
Give Claude a real browser using Vibium's built-in MCP server. Once connected, Claude can navigate, click, type, and screenshot live web pages on its own.
3 min read→