AI-powered job application pipeline using LangChain for resume parsing, job matching, cover letter generation, and automated job applications via browser automation
Job-MCP exposes 9 browser automation tools with minimal metadata. All tools are defined with @tool decorators and have basic descriptions, but descriptions are vague, lack context for when/why to use tools, and do not explain consequences of write operations. Input schemas are present but lack depth, most parameters are bare strings without format constraints, ranges, or guidance on valid values. No output schemas are documented. Error handling is absent, tools return success strings but no guidance on failure modes or recovery. The server appears designed for internal LLM chains rather than production-grade agent composition.
Click an element by CSS selector.
Fill a form field identified by CSS selector with the given value.
List all visible form inputs on the current page with their labels, names, types, and current values.
Return visible text content of the current page (truncated to 4000 chars).
Navigate the browser to the given URL. Returns the page title.
Select a dropdown option by visible text.
Take a screenshot and save it. Returns the file path.
Parameter descriptions missing or generic. 'selector' appears in 6 tools but is never described (CSS selector syntax, format, valid characters, length limits). 'value' parameter in fill_field and select_option lacks guidance on valid formats, character escaping, or length constraints.
Tool descriptions are under 80 characters and lack critical context. 'Get form fields' (21 chars) does not explain what fields are returned, how to use them, or why this tool exists. 'Return visible text content of the current page (truncated to 4000 chars)' (69 chars) mentions truncation but not why, or what to do if content exceeds limit.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 58 | - | v1 |
Upload a file to a file-input element.
Wait for an element to appear on the page.
No output schema documentation. Tools return untyped strings (e.g., 'Filled selector with value'). LLMs cannot know what fields to extract or how to chain results to downstream tools. No documentation of JSON output from get_form_fields or structured error responses.
No error handling or recovery guidance. Tools like wait_for_selector return 'Element not found within Xms' but provide no guidance on what the LLM should do next (retry with longer timeout, navigate away, ask user). Fill and click operations have no error cases documented, what happens if selector is invalid or element is not clickable?
No distinction between read-only and write operations in descriptions. fill_field, select_option, click_element, and upload_file are destructive (they modify page state) but descriptions do not warn of this or suggest confirmation patterns. LLMs may not understand that these calls are non-idempotent.
No parameter constraints documented. 'timeout_ms' in wait_for_selector lacks range (minimum, maximum). File paths in upload_file are bare strings, no guidance on absolute vs relative paths, file size limits, or allowed extensions.
Tool names use verb_noun but lack semantic clarity in use cases. 'click_element' and 'fill_field' are generic; a description of WHEN to use each vs alternatives (e.g., when to click vs fill) would help LLMs compose them. No guidance on whether to click a submit button or just fill a form and wait.