genxevo-selenium
GenXEvo AI Automation Agent — Python Selenium
AI 코딩 에이전트에게 Python + Selenium UI 자동화 엔지니어링을 위한 신뢰할 수 있는 눈과 손을 제공하는 MCP 서버 — 결정적(deterministic) 기능, 구조화된 증거, 강제된 안전 경계, 검증 가능한 결과.
문제
어떤 언어 모델에게든 실패하는 Selenium 테스트를 고치라고 하면, 그 모델은 자신감 있고 그럴듯하지만 틀린 XPath를 만들어낼 것입니다.
그럴 수밖에 없습니다. 모델은 페이지를 볼 수 없고, 테스트 출력을 볼 수 없으며, 대개 프로젝트의 실제 구조조차 볼 수 없습니다 — 스위트가 어떤 인터프리터에서 실행되는지, 어떤 러너가 수집하는지, 페이지 객체가 실제로 어디에 있는지. 모델은 그 빈틈을 유창함으로 메웁니다.
GenXEvo는 그 빈틈을 제거하기 위해 존재합니다. 그래서 모델이 추론할 수 있는 진실된 무언가를 갖게 됩니다.
Related MCP server: self-healing-browser-mcp
원칙
수정 이전에 증거. 성공 이전에 증거.
에이전트는 로케이터를 발명하지 않습니다. 관찰합니다. 수정을 선언하지 않습니다. 자신이 고쳤다고 주장하는 실패와 식별자로 상관관계가 있는 실행으로 증명합니다. 모든 기능은 명시적인 신뢰 수준을 가진 증거를 반환하고, 모든 결론은 그것을 만들어낸 신호를 담고 있으며, 모든 결과는 성공 여부를 기계가 읽을 수 있는 필드로 말합니다 — 성공과 실패를 구분하지 못하는 에이전트는 검증하지 않은 수리를 자신 있게 보고할 것이고, 그 결과는 아예 돕지 않는 것보다 더 나쁘기 때문입니다.
이것이 무엇인지, 무엇이 아닌지
이다 | 이미 운영 중인 UI 자동화 엔지니어링 워크플로우를 감싸는 MCP 기능 계층 |
아니다 | 테스트 프레임워크, Selenium 래퍼, pytest의 대체재, 또는 그 자체로 AI가 아님 |
이 서버 안에는 모델이 없습니다. AI 모델이 추론합니다. GenXEvo는 결정적입니다. 실제로 디스크에 있는 것을 읽고, 이후에는 실제 브라우저를 구동하고 실제 테스트를 실행하며, 구조화된 사실을 반환합니다. 모르는 것이 있으면 신뢰 수준을 붙여 그렇게 말합니다.
상태 — 솔직하게
이것은 1A 단계입니다: 기반과 진짜로 작동하는 두 가지 기능만 있습니다.
구축 및 테스트 완료 | 결과 계약, 오류 어휘, 증거 모델, 신뢰할 수 없는 콘텐츠 프레이밍, 구성, 경로 격리, 비밀번호 편집, 테스트 선택 검증, 실행 모델, 기능 카탈로그, 기능 호출기, MCP 어댑터 |
작동하는 MCP 도구 |
|
설계·카탈로그 등록됨, 호출 불가 | 추가 기능 15개, 각각 제공 단계와 함께 게시됨 |
구축 안 됨 | 브라우저 제어, 테스트 실행, 수리, 검증 |
이 저장소에는 스텁(stub)이 없습니다. 계획된 기능은 genxevo_agent_status에 표시되어 에이전트가 그에 맞춰 계획할 수 있고, 도구로 등록되지 않아 에이전트가 호출할 수 없습니다. 가짜 구현은 정직한 부재보다 나쁩니다. 에이전트에게 거짓된 것을 가르치기 때문입니다.
각 단계가 제공하는 것과 종료 기준은 docs/roadmap.md를 참조하십시오.
빠른 시작
요구 사항
Python 3.11, 3.12 또는 3.13
에이전트가 작업할 Python 자동화 프로젝트
3.11 하한선은 유행이 아니라 엔지니어링 결정입니다:
tomllib는 3.11에서 표준 라이브러리에 들어왔고, 그것이 프로젝트 탐색이 코어에서 서드파티 파서 없이pyproject.toml을 파싱할 수 있게 해줍니다. 3.10에서는tomli가 필요합니다. ADR-001 참조.
설치
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
pip install -e .시작을 확인하십시오 — 배너는 stderr로 간다는 점에 유의하십시오. stdout은 MCP 전송에 속하기 때문입니다:
genxevo-selenium-agent --versionMCP 클라이언트에 연결
.mcp.json.example을 복사하고 --workspace를 자동화 프로젝트를 가리키게 하십시오:
{
"mcpServers": {
"genxevo-selenium": {
"command": "C:\\path\\to\\your\\.venv\\Scripts\\python.exe",
"args": [
"-m", "genxevo_selenium_agent",
"--workspace", "C:\\path\\to\\your\\automation-project"
]
}
}
}인터프리터를 명시적으로 지정하는 것이 모든 플랫폼에서 신뢰할 수 있는 형태입니다: 콘솔 스크립트는 하나의 가상 환경 안에 존재하며, MCP 클라이언트는 활성화된 셸을 상속하지 않습니다.
Claude Code, VS Code 및 PyCharm에 대한 전체 지침: docs/installation.md.
구성 (선택 사항)
구성 파일이 없어도 오류가 아닙니다 — 기본값이 바로 안전한 구성입니다. 무언가를 변경하려면 워크스페이스 루트에 genxevo.config.toml을 넣으십시오:
version = 1
[execution]
enabled = false # test execution is off until you turn it on
require_selection = true # never run the whole suite by accident
[security]
redact_secrets = true모든 설정, 기본값 및 근거: docs/configuration.md.
아키텍처
AI MODEL (all reasoning lives here)
│ MCP · JSON-RPC over stdio
▼
┌──────────────────────────────────────────────────────────┐
│ genxevo_selenium_agent.mcp_server THIN ADAPTER │
│ tool names · descriptions · annotations · stderr logging │
│ every tool function holds no logic │
└──────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────┐
│ genxevo_selenium_agent.core THE PRODUCT │
│ standard library + one typing-only shim, and nothing else │
│ │
│ capabilities runtime · invoker · catalog · 2 built │
│ discovery manifests · runners · venvs · page objects │
│ security paths · redaction · selection · globs │
│ contracts ToolResult · AgentError · Evidence │
│ runs RunId · RunOutcome · FileRunRegistry │
└──────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
real project real browser (1C) real test runs (1D)계층 규칙: 동작은 어댑터에 절대 존재하지 않습니다. 도구 함수는 MCP 클라이언트를 통해 단위 테스트할 수 없으므로, 잘못될 수 있는 것은 어댑터에 허용되지 않습니다.
결과 계약
모든 기능은 동일한 봉투(envelope)를 반환하며, 에이전트는 산문이 아니라 status로 분기합니다:
{
"contractVersion": "1.0",
"status": "partialSuccess", // one of nine values — see below
"operation": "project.discover",
"summary": "…one sentence for a human…",
"data": { }, // shape documented per capability
"warnings": [ { "code": "…", "message": "…", "detail": "…" } ],
"error": null, // present whenever status is not succeeding
"evidence": [ { "id": "…", "kind": "…", "trust": "trusted|untrusted", … } ],
"nextActions": [ { "tool": "…", "reason": "…" } ],
"durationMs": 41,
"startedAt": "2026-08-22T09:15:00Z",
"safeToRetry": true
}아홉 가지 상태: success · partialSuccess · failure · validationError ·
configurationError · blocked · timeout · cancelled · skipped
각각은 에이전트가 내려야 하는 별개의 결정입니다. 그 외에는 목록에 없습니다.
도구가 TypedDict로 주석 처리되어 있기 때문에, 이 전체 계약 — status 열거형을 포함하여 — 각 도구의 outputSchema로 tools/list에 게시됩니다. 에이전트는 아무것도 호출하기 전에 결과를 읽는 방법을 배웁니다.
불변식은 관례가 아니라 코드로 강제됩니다: 성공 상태는 오류를 절대 담지 않고, 실패 상태는 항상 오류를 담으며, status는 오류의 범주에서 파생되어 둘이 불일치할 수 없고, partialSuccess는 그것을 설명하는 경고 없이는 구성될 수 없습니다.
보안 태세
GenXEvo는 신뢰할 수 없는 콘텐츠를 읽고, 그것을 언어 모델에 넘기며, 이후에는 그 모델에게 파일 쓰기 및 코드 실행 기능을 부여할 것입니다. 설계 가정은 모델이 결국에는 가져서는 안 되는 것을 요청하도록 설득될 것이며, 거부하는 것은 모델이 아니라 서버라는 것입니다.
제어 | 하는 일 |
명시적 워크스페이스 루트 | 절대 추론하지 않음. 미구성이면 거부하고, 해결책을 제시 |
경로 격리 | 구조적으로 거부 → 정규화 → 그 다음 격리 → 거부 목록 → 의도. 기능은 |
심볼릭 링크 해석 |
|
거부 목록 | Python 인지형: |
비밀번호 편집 | 키 이름 및 값 형태 감지, |
프로젝트 코드는 절대 실행되지 않음 |
|
신뢰할 수 없는 프레이밍 | 이스케이프 불가 — 페이로드는 두 구분자 중 어느 것도 위조할 수 없음 |
선택 검증 |
|
안전한 기본값 | 실행 꺼짐, 편집 켜짐, 선택 필수 |
모든 것에 경계 | 타임아웃, 협력적 취소, 스캔 한도, 수리 주기 상한 |
실행 상관관계 | 오래된 산출물이 수리의 증거로 읽힐 수 없음 |
오류 위생 | 어떤 traceback도 에이전트에 도달하지 않음; 거부는 절대 절대 워크스페이스 경로를 반향하지 않음 |
잔여 위험은 숨기지 않고 문서화됩니다 — SECURITY.md 및 docs/security.md 참조. 프레이밍은 영향력을 방지하지 않고, 테스트 실행은 설계상 임의 코드이며, stdio MCP에는 인증이 없고, 편집은 휴리스틱입니다.
GenXEvo 제품군
이것은 독립적인 에이전트 제품군 중 두 번째 제품입니다. 각각 별도로 클론하고 설치할 수 있습니다. 공유하는 것은 빌드가 아니라 계약입니다.
Selenium | Playwright | |
C# | 계획됨 | |
Python | 이 저장소 | 계획됨 |
Java · JavaScript · TypeScript | 계획됨 | 계획됨 |
언어 간에 이식되는 것은 JSON 형태, 아홉 가지 상태 어휘, 오류 코드, 실행 식별자 형식, 증거 모델 및 안전 클래스입니다. 하나의 GenXEvo 서버를 학습한 에이전트는 첫 접촉에서 다음 서버를 알아볼 수 있어야 합니다.
공유되지 않는 것은 구현입니다. 이 제품은 설계상 Python 네이티브입니다: TypedDict 출력 스키마, tomllib 구성, 직렬화 프레임워크 대신 dataclasses, asyncio.to_thread에 걸친 협력적 취소, 그리고 pyproject.toml, pyvenv.cfg 및 pytest 자체 수집 규칙을 중심으로 구축된 탐색 모델.
문서
문서 | 내용 |
패키지, 계층, 도메인 모델, 계약, 증거, 실행, 동시성 | |
Claude Code, VS Code, PyCharm; 인터프리터 함정 | |
모든 설정, 기본값 및 근거; 우선순위; 검증 | |
전체 계약 — 2개는 상세히 구현, 15개는 보장 사항과 함께 계획됨 | |
엔지니어링 루프, 에이전트 규칙, 작업 예제, 안티 패턴 | |
위협 모델, 근거가 있는 통제, 잔여 위험 | |
아키텍처 결정 기록, 각각의 동기가 된 결함과 연결됨 | |
1A~3단계, 종료 기준 및 범위 제외 사항 | |
구체적인 실패 모드 및 해결 방법 | |
에이전트와 대화하는 방법, 완전한 작업 프롬프트 포함 | |
작동하는 구성 파일 |
개발
pip install -e ".[dev]"
ruff check . # lint
ruff format --check . # format
mypy # strict type checking
pytest # the full suiteCONTRIBUTING.md에 명시된 표준: 모든 보안 통제는 해피 패스뿐만 아니라 공격을 검증하는 테스트와 함께 제공되며, genxevo_selenium_agent.core는 표준 라이브러리와 정확히 하나의 타이핑 전용 shim만 가져옵니다. 이는 관례가 아니라 ast로 모든 모듈을 파싱하는 테스트로 강제됩니다. 유일한 예외는 typing_extensions이며, ADR-002는 대안이 Python 3.11에서 시작되지 않는 서버인 이유를 설명합니다.
저자
Rajeshkumar Muthu — 시니어 QA 자동화 에이전틱 AI 엔지니어.
MIT 라이선스에 따라 사용 허가됨.
Available Tools
2 toolsgenxevo_agent_statusGenXEvo agent statusARead-onlyIdempotent
Report what the GenXEvo agent currently is: whether it is configured, which workspace roots it may read, what its security policy is, which Python interpreter is hosting the server, whether test execution is permitted, and exactly which capabilities this build provides versus which are planned for a later phase. Call this FIRST in any session, and again whenever a capability behaves unexpectedly. Note that the interpreter reported here runs GenXEvo itself and is usually NOT the interpreter the automation project's tests run on -- use genxevo_discover_project for that. Returns the GenXEvo ToolResult envelope: branch on the 'status' field, never on the prose in 'summary'. Read-only and always safe to repeat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| runId | No | |
| status | Yes | |
| summary | Yes | |
| evidence | Yes | |
| warnings | Yes | |
| operation | Yes | |
| startedAt | Yes | |
| durationMs | Yes | |
| nextActions | Yes | |
| safeToRetry | Yes | |
| contractVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description reinforces this with 'Read-only and always safe to repeat.' It adds meaningful behavioral context beyond annotations: returns the GenXEvo ToolResult envelope, instructs branching on the 'status' field rather than prose in 'summary', and clarifies that the interpreter reported is for GenXEvo itself, not the test project's interpreter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but every sentence adds useful operational guidance: what is reported, when to call it, the interpreter caveat, sibling routing, and response-handling instructions. It is front-loaded with the primary purpose and organized logically, though the final sentence about read-only safety partially restates annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a parameterless status tool: it defines the tool's scope, usage timing, the sibling alternative, the interpreter caveat, and how to interpret the returned envelope. Since an output schema exists, the return-value contract is additionally covered structurally, and the description goes further by warning against relying on prose in 'summary'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema has 100% coverage by having no properties, so there is nothing the description must explain. The description still clarifies that this is a status query with no arguments required. A score of 4 reflects the baseline for a parameterless tool; there is no room for additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report') and a specific resource (the GenXEvo agent's current status), and enumerates the exact dimensions reported: configuration, workspace roots, security policy, interpreter, test execution permission, and implemented vs planned capabilities. It also distinguishes itself from its sibling genxevo_discover_project by explicitly directing interpreter-related project queries there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit timing guidance: 'Call this FIRST in any session, and again whenever a capability behaves unexpectedly.' It also provides an exclusion and alternative by noting the reported interpreter is usually not the project test interpreter and that genxevo_discover_project should be used for that purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
genxevo_discover_projectDiscover the Python automation projectARead-onlyIdempotent
Scan the configured workspace and report the Python automation project that is actually there: pyproject.toml, requirements files, setup.cfg and lock files with their declared dependencies; the test runner the project itself states it uses (pytest or unittest, or 'unknown' -- never assumed); the test roots, established from files matching the project's own collection patterns rather than from any folder being called 'tests'; virtual environments with the interpreter version read from pyvenv.cfg; the browser automation library in use (Selenium, Playwright, Appium); candidate page-object directories, identified because their modules drive a browser and are not collected as tests; and CI configuration. Every conclusion carries the signals that produced it and an explicit confidence level, so you can tell a fact from a guess. GenXEvo never imports or executes anything in the project to obtain this -- setup.py and conftest.py are read as text only. Call this before reasoning about any test, locator or run. Read-only, makes no assumption about folder layout, and always safe to repeat. If 'status' is 'partialSuccess' the scan hit a limit or could not read something, and 'not found' may mean 'not looked at'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| runId | No | |
| status | Yes | |
| summary | Yes | |
| evidence | Yes | |
| warnings | Yes | |
| operation | Yes | |
| startedAt | Yes | |
| durationMs | Yes | |
| nextActions | Yes | |
| safeToRetry | Yes | |
| contractVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description enriches this substantially: it promises no execution or imports, reads config files as text, exposes the partialSuccess status semantics ('not found' may mean 'not looked at'), and states that every conclusion carries signals and an explicit confidence level. It also says it makes no folder-layout assumptions and is 'always safe to repeat,' which is consistent with the idempotent annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well structured and front-loaded with the main purpose. Each listed artifact and caveat adds meaningful guidance, and the critical call-time directive is placed near the end. It is slightly dense and has minor redundancy around read-only/safe-to-repeat, but every sentence contributes to agent understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a zero-parameter tool with a rich output schema, the description is complete: it explains what will be discovered, how conclusions are evidenced, the no-execution guarantee, the partialSuccess edge case, when to call it, and its safety profile. Nothing an agent needs to decide whether and when to invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there are no parameter semantics for the description to clarify. Per the rubric, zero params yields a baseline of 4. The description instead focuses on behavior and outputs, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Scan the configured workspace and report the Python automation project that is actually there.' It enumerates concrete artifacts and properties (pyproject.toml, lock files, test runner, virtual environments, browser library, page-object directories, CI config) and clearly separates this discovery tool from the only sibling, genxevo_agent_status, by adding a directive: 'Call this before reasoning about any test, locator or run.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit invocation point: 'Call this before reasoning about any test, locator or run.' It also states what the tool will not do, e.g., it never imports or executes project code, and it reads setup.py/conftest.py as text only. It does not name exclusions or explicitly compare against genxevo_agent_status, but for a zero-parameter discovery tool the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
genxevo_agent_status - First observed
genxevo_discover_project
TDQS
Scored across 2 tools
genxevo_agent_status reports on the agent/server itself, while genxevo_discover_project inspects the workspace project. Their purposes and targets are completely distinct, so an agent should never confuse them.
Both tools share the genxevo_ prefix and use snake_case, which is good, but genxevo_agent_status is a noun-phrase while genxevo_discover_project is verb+noun. This is a minor stylistic inconsistency rather than a serious problem.
Two tools is on the thin side and feels borderline, but both are substantial read-only capabilities that form a coherent project-reconnaissance pair. The count is not excessive, but it is minimal.
The descriptions repeatedly mention tests, locators, and runs, but no tool actually executes tests, inspects locators, or interacts with the Selenium project. After discovery, an agent has no way to act on the project, which is a significant gap for a Selenium-oriented server.
Maintenance
Related MCP Connectors
Browser-backed QA with evidence and fix-ready reports for coding agents.
Browser-based QA for AI-built software. Test pages with real browsers via agents.
Agentic AI quality engineering: run, debug and triage tests on real browsers and devices
Read-only web QA agent: scans a site in a real browser and returns evidence-backed findings
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to autonomously debug UIs by delegating high-level stories to a small agent that drives browsers or desktop apps and reports structured pass/fail findings with evidence.34 npm2MIT
- AlicenseBqualityBmaintenanceEnables AI agents to control a browser with self-healing locators that automatically recover when selectors change, allowing reliable web automation through natural language.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to autonomously interact with and test web applications in a real browser, providing DOM/Accessibility tree extraction, runtime telemetry, screenshot capture, and Markdown test reports.12 npm1MIT

QualityMax QA MCPofficial
AlicenseAqualityAmaintenanceEnables coding agents to independently verify web changes by scanning pages, inspecting UI structure, generating Playwright reproductions, and executing tests with structured QA evidence.4222 npm4MIT