This project orchestrates multi-agent workflows for automating application drafting and submission using LLMs and browser automation. It features:
This project uses browser-use for browser automation. The submission agent leverages browser-use to:
- Open and interact with web forms
- Fill out and submit applications automatically
- Extract content from success pages after submission
Make sure to follow the browser-use setup instructions for your platform. The browser-use package is a core dependency for the submission agent's automation capabilities.
- Multi-agent workflow for data ingestion, research, writing, validation, and submission
- MCP server exposing the submission agent as a tool
- LangChain/LangGraph integration for agent-tool orchestration
- Streamlit UI for user interaction
- Summarize user profile and target entity
- Draft and validate applications (SOP, job, etc.)
- Submit applications via browser automation
- Modular agents for each workflow step
- MCP server for tool interoperability
main.py # Entry point
ui.py # Streamlit UI
requirements.txt # Dependencies
agents/ # Agent implementations
workflows/ # Workflow orchestration
submission_mcp_server.py # MCP server for submission agent
pip install -r requirements.txtCreate a .env file with your API keys (e.g., for Gemini):
GEMINI_API_KEY=your_key_here
python submission_mcp_server.pystreamlit run ui.pyYou can invoke the submission agent as a tool from other agents or scripts using the MCP protocol.
- User provides profile sources and a target entity (e.g., university or company).
- The workflow loads and summarizes the profile data.
- Entity research agent gathers and summarizes information about the target.
- Writing agent drafts an application (e.g., SOP) using the summaries.
- Validation agent reviews the draft for quality and relevance.
- Submission agent (via MCP server) fills and submits the application form using browser automation.
Example Python usage:
from workflows.application_workflow import ApplicationWorkflow
workflow = ApplicationWorkflow(gemini_api_key="your_gemini_key")
profile_sources = ["data/my_cv.pdf"]
user_prompt = "Apply to the MS program at Example University."
submission_url = "https://exampleuniversity.edu/apply"
result = workflow.run(profile_sources, user_prompt, submission_url)
print(result["application"])
print(result["submission_result"])- Make sure only one MCP server instance runs on a given port.
- All logs and print statements in the MCP server should go to stderr, not stdout.
- The project supports both direct tool invocation and agent-based orchestration.