Skip to main content
Glama

🤖 RobotMCP - AI 기반 테스트 자동화 브리지

Python Robot Framework FastMCP License

평범한 영어를 입력하면 실제 Robot Framework 테스트가 출력됩니다 — AI 에이전트가 타이핑을 대신합니다.

RobotMCP(rf-mcp)는 코딩 에이전트에게 Robot Framework의 열쇠를 쥐여주는 Model Context Protocol (MCP) 서버입니다. 에이전트는 키워드를 발견하고, Browser, Selenium, Appium, Requests, 데이터베이스 또는 데스크톱을 대상으로 단계를 실시간으로 실행하며 실제로 어떤 일이 일어나는지 확인하고, 단계가 통과하면 깔끔한 .robot 스위트를 작성합니다. 추측한 로케이터, 환각된 키워드, "내 컴퓨터에서는 작동해요"는 없습니다. Robot Framework 기반으로 구축되었으며, 오픈 소스이고 항상 진화합니다.

rf-mcp가 처음이신가요? **Getting Started**로 이동하세요. 전체 그림을 보려면 MCP 도구 참조, 구성, **작동 예제**를 확인하세요.

📺 비디오 튜토리얼

RobotMCP Tutorial

소개

https://github.com/user-attachments/assets/ad89064f-cab3-4ae6-a4c4-5e8c241301a1


✨ 빠른 시작

세 개의 명령과 한 문장. 그것이 전체 설정입니다.

1️⃣ 도구로 설치

사전 요구 사항?

  • Python +v3,12 설치

  • 관리자 권한으로 Powershell에서 > winget install astral-sh.uv # uv 명령을 활성화하려면

  • VScode 및 확장 프로그램 설치 (GitHub copilot 및 로그인) # 에이전트 터미널을 활성화하려면

  • Vscode 확장 프로그램 Material Icon themes, Save Typing, Dracula, Robocorp 설치 # robot framework를 활성화하려면

# Everything (Browser, Selenium, Appium, Requests, Database)
uv tool install "rf-mcp[all]"

# ...or just what you need — API testing is pure Python, nothing else to do:
uv tool install "rf-mcp[api]"

이렇게 하면 robotmcp 명령이 PATH에 추가됩니다. 추가 기능(extras)은 어떤 테스트 라이브러리가 함께 제공되는지 결정합니다 — 설치 아래의 extras 표를 참조하세요.

2️⃣ 코딩 에이전트에 연결

robotmcp init            # detects libraries, prints the MCP config to paste
robotmcp install         # registers rf-mcp into the agents it finds

robotmcp install은 Claude Code, Codex, GitHub Copilot, opencode, Gemini CLI, Kilo Code, goose, Cursor에 맞는 MCP 구성을 각각의 형식으로 작성하며, 다른 서버는 건드리지 않습니다. 직접 하고 싶으신가요? 모든 에이전트가 다음을 수락합니다:

{ "mcpServers": { "robotmcp": { "command": "robotmcp" } } }
{
  "servers": {
    "robotmcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "-m", "robotmcp.server"],
      "env": { "UV_COMPILE_BYTECODE": "1" }
    }
  }
}

UV_COMPILE_BYTECODE=1은 설치 시 의존성 트리를 미리 컴파일합니다. 이 옵션이 없으면 설치/업그레이드 후 첫 번째 서버 시작 시 MCP 핸드셰이크가 완료되기 전에 몇 초의 .pyc 컴파일 시간이 소요됩니다 (일부 클라이언트는 시간 초과로 서버를 사용할 수 없음으로 표시). 이는 일회성 설치 시 비용입니다.

HTTP

HTTP 전송으로 MCP 서버를 시작합니다:

uv run -m robotmcp.server --transport http --host 127.0.0.1 --port 8000

그런 다음 AI 에이전트를 구성합니다:

{
  "servers": {
    "robotmcp": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

Claude Code

claude mcp add rf-mcp -- uvx rf-mcp

3️⃣ 테스트 시작 — 그냥 요청하세요

Use #robotmcp to create a TestSuite and execute it step wise.
Create a test for https://www.saucedemo.com/ that:
- Logs in to https://www.saucedemo.com/ with valid credentials
- Adds two items to cart
- Completes checkout process
- Verifies success message

Use Selenium Library.
Execute the test suite stepwise and build the final version afterwards.

그게 전부입니다. rf-mcp는 에이전트를 발견, 실시간 실행, 스위트 생성 과정으로 안내합니다 — 테스트를 설명하기만 하면 됩니다.


Related MCP server: robotframework-mcp

📚 문서

가이드

내용

Getting Started

설치, 에이전트 연결, 첫 테스트 실행

MCP 도구 참조

rf-mcp가 에이전트에 노출하는 모든 도구 — 매개변수, 반환 값, 사용 시기

구성

모든 ROBOTMCP_* 환경 변수 및 CLI 플래그

예제

복사하여 사용할 수 있는 웹 / API / 모바일 / 데스크톱 / BDD / 데이터 기반 워크스루

라이브러리 플러그인

rf-mcp에 자신의 Robot Framework 라이브러리를 가르치기

지침 템플릿

프로젝트별 에이전트 동작 제어


🛠️ 설치

빠른 시작은 권장 경로(uv tool install)를 다룹니다. 이 섹션에는 extras 표, 대체 설치 방법, 전체 에이전트 등록 세부 정보가 있습니다.

Extras

Extras는 어떤 Robot Framework 라이브러리가 함께 제공되는지 결정합니다:

Extra

추가되는 것

설치 후

api

RequestsLibrary

없음

web

SeleniumLibrary + Browser

Selenium: 없음 (Selenium Manager가 드라이버를 가져옴); Browser: robotmcp init --browsers

mobile

AppiumLibrary

Appium 서버 (외부)

database

DatabaseLibrary

DB 드라이버

desktop

PlatynUI 네이티브 데스크톱 (Windows/Linux)

Python 3.12+

frontend

Django 대시보드

—

memory

영구 의미 메모리 (sqlite-vec + model2vec)

ROBOTMCP_MEMORY_ENABLED=true

all

위의 모든 Robot Framework 라이브러리 (Python 3.12+에서 desktop 포함)

위와 동일

Browser Library에는 Playwright 브라우저도 필요합니다 — rf-mcp 자체 환경에서 robotmcp init --browsers(또는 rfbrowser init)를 한 번 실행하세요. Node.js는 Browser에만 필요합니다.

기타 설치 방법

pip install "rf-mcp[all]"                 # pip instead of uv
uv add "rf-mcp[all]" && uv sync           # into an existing uv project

# From source (development)
git clone https://github.com/manykarim/rf-mcp.git && cd rf-mcp
uv sync --all-extras --dev

Docker

사전 빌드된 이미지 (CI용 헤드리스, 시각적 디버깅용 VNC 이미지 포함):

docker pull ghcr.io/manykarim/rf-mcp:latest          # headless
docker run -p 8000:8000 -p 8001:8001 ghcr.io/manykarim/rf-mcp:latest    # HTTP + frontend
docker run -it --rm ghcr.io/manykarim/rf-mcp:latest uv run robotmcp     # STDIO

docker pull ghcr.io/manykarim/rf-mcp-vnc:latest      # X11 desktop over VNC/noVNC
docker run -p 8000:8000 -p 8001:8001 -p 5900:5900 -p 6080:6080 ghcr.io/manykarim/rf-mcp-vnc:latest

헤드리스에는 Chromium, Firefox ESR 및 Playwright 브라우저가 포함됩니다. VNC 포트: 8000 (MCP HTTP), 8001 (프론트엔드), 5900 (VNC), 6080 (noVNC — http://localhost:6080/vnc.html).

코딩 에이전트에 등록

robotmcp list                              # supported agents + what's detected/registered
robotmcp install                           # interactive: registers into detected agents
robotmcp install --agents claude-code,codex,gemini
robotmcp install --agents all --scope user
robotmcp install --dry-run                 # show the plan, write nothing
robotmcp uninstall                         # safe, reversible removal

지원되는 에이전트 (각각 자체 파일/형식으로 작성되며 다른 MCP 서버는 보존됨): Claude Code, OpenAI Codex, GitHub Copilot, opencode, Gemini CLI, Kilo Code, goose, Cursor (및 pi는 구성 규칙이 확인될 때까지 계획됨으로 나열됨).

프로젝트 환경을 사용합니다. 자체 설정 환경(uv, poetry, pdm, pipenv, rye, hatch 또는 일반 .venv)이 있는 프로젝트에 설치하면 rf-mcp가 해당 환경에 대해 실행되도록 연결됩니다 — 따라서 프로젝트의 라이브러리, 키워드 및 리소스를 번들된 것뿐만 아니라 볼 수 있습니다. 해결된 명령을 시작하고 라이브러리에 연결할 수 있는지 구성 작성 전에 확인합니다. 맹목적이거나 손상된 명령은 거부됩니다. 전역 uvx / uv tool 설치는 프로젝트별 설정 없이 모든 프로젝트에 서비스를 제공합니다. -C <dir>로 지정하고, --into-project로 rf-mcp를 프로젝트 환경에 설치하도록 선택하고, robotmcp doctor --project-dir <dir>를 실행하여 시작이 도달하는 라이브러리를 확인하세요.

범위. 설치는 기본적으로 --scope project(현재 프로젝트에 작성, 예: ./.mcp.json)이며 에이전트가 지원하는 경우입니다. 전역(홈 디렉터리) 설치에는 --scope user를 사용하세요. goose는 사용자 범위만 지원합니다. GitHub Copilot은 프로젝트 범위만 지원합니다.

안전하고 되돌릴 수 있습니다. 모든 변경 사항은 해시 추적 매니페스트(~/.local/state/robotmcp/install-manifest.json)에 기록됩니다. robotmcp uninstall은 설치 이후 변경되지 않은 항목만 제거합니다 — 수동으로 편집된 항목은 그대로 두고 보고되며, 관련 없는 서버는 절대 건드리지 않습니다. 구성을 직접 편집하는 것을 선호하시나요? { "mcpServers": { "robotmcp": { "command": "robotmcp" } } }를 추가하세요.

🔌 라이브러리 플러그인

플러그인 시스템을 통해 사용자 지정 라이브러리로 RobotMCP를 확장하세요. 두 가지 검색 모드를 사용할 수 있습니다:

  • 엔트리 포인트 (robotmcp.library_plugins) — 패키지된 플러그인용.

  • 매니페스트 파일 (JSON) — .robotmcp/plugins/ 아래의 작업 영역 재정의용.

자세한 지침은 라이브러리 플러그인 작성 가이드를 참조하고, examples/plugins/sample_plugin의 샘플 플러그인을 탐색하여 빠르게 시작하세요.


🖥️ 프론트엔드 대시보드

RobotMCP에는 활성 세션, 키워드 및 도구 활동을 미러링하는 선택적 Django 기반 대시보드가 포함되어 있습니다.

RobotMCP Frontend Dashboard

  1. 프론트엔드 extras 설치

    pip install rf-mcp[frontend]
  2. 프론트엔드를 활성화한 상태로 MCP 서버 시작

    uv run -m robotmcp.server --with-frontend
    • 기본 URL: http://127.0.0.1:8001/

    • 빠른 토글: --frontend-host, --frontend-port, --frontend-base-path

    • 환경 변수: ROBOTMCP_ENABLE_FRONTEND=1, ROBOTMCP_FRONTEND_HOST, ROBOTMCP_FRONTEND_PORT, ROBOTMCP_FRONTEND_BASE_PATH, ROBOTMCP_FRONTEND_DEBUG

  3. MCP 클라이언트 연결 (Cline, Claude Desktop 등)을 동일한 서버 프로세스에 연결 — 세션이 활성화되면 대시보드가 자동으로 이벤트를 스트리밍합니다.

특정 실행에서 대시보드를 비활성화하려면 플래그를 생략하거나 --without-frontend를 전달하세요.


📋 지침 템플릿

RobotMCP는 MCP initialize 응답을 통해 서버 수준 지침을 LLM에 보내어 키워드를 실행하기 전에 발견하도록 안내합니다. 이는 특히 작은 LLM에서 실패한 도구 호출과 낭비되는 토큰을 크게 줄여줍니다.

구성

세 가지 환경 변수가 지침 동작을 제어합니다:

변수

값

기본값

ROBOTMCP_INSTRUCTIONS

off / default / custom

default

ROBOTMCP_INSTRUCTIONS_TEMPLATE

minimal / standard / detailed / browser-focused / api-focused

standard

ROBOTMCP_INSTRUCTIONS_FILE

.txt 또는 .md 파일 경로

(없음, mode=custom일 때 필수)

ROBOTMCP_LOG_LEVEL

DEBUG / INFO / WARNING / ERROR — stderr 로그 상세 수준

WARNING

ROBOTMCP_MCP_LOG_NOTIFICATIONS

1로 설정하면 로그를 MCP notifications/message로 클라이언트에 전달 (구조화, 수준 태그 지정)

(꺼짐)

출력 및 로깅. MCP stdio 채널(stdout)은 JSON-RPC만 전달합니다. 모든 로그와 한 줄 준비 배너는 stderr로 이동합니다. 로깅은 기본적으로 WARNING이므로 클라이언트가 넘치지 않습니다 — 문제 해결을 위해 ROBOTMCP_LOG_LEVEL=INFO/DEBUG를 설정하세요. 로깅은 실행을 차단하지 않습니다 (오버플로 시 드롭되는 백그라운드 스레드에서 배출됨), fd 1은 전송에서 절대 리디렉션되지 않습니다.

내장 템플릿

템플릿

~토큰

최적 용도

minimal

~40

고성능 LLM(Claude Opus, GPT-4) — 간단한 알림만

standard

~400

중급 LLM(Claude Sonnet, GPT-4o) — 균형 잡힌 워크플로우 가이드

detailed

~600

소형 LLM(Claude Haiku, GPT-4o-mini) — 예제 포함 단계별 가이드

browser-focused

~350

웹 전용 테스트 시나리오

api-focused

~300

API 전용 테스트 시나리오

예시

{
  "servers": {
    "robotmcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "-m", "robotmcp.server"],
      "env": {
        "ROBOTMCP_INSTRUCTIONS": "default",
        "ROBOTMCP_INSTRUCTIONS_TEMPLATE": "detailed"
      }
    }
  }
}

사용자 지정 지침

ROBOTMCP_INSTRUCTIONS=custom을 설정하고 ROBOTMCP_INSTRUCTIONS_FILE을 통해 파일을 제공합니다. 사용자 지정 파일은 {available_tools} 플레이스홀더 치환을 지원합니다. 허용 확장자: .txt, .md, .instruction, .instructions. 파일이 없거나 검증에 실패하면 서버는 자동으로 standard 템플릿으로 대체합니다.

전체 가이드는 docs/INSTRUCTION_TEMPLATES_GUIDE.md를 참조하세요.


🪝 디버그 연결 브리지

https://github.com/user-attachments/assets/8d87cd6e-c32e-4481-9f37-48b83f69f72f

RobotMCP는 localhost HTTP 브리지를 통해 라이브 ExecutionContext를 노출하는 경량 Robot Framework 라이브러리인 robotmcp.attach.McpAttach를 제공합니다. VS Code(RobotCode) 또는 다른 IDE에서 스위트를 디버깅할 때 브리지를 통해 RobotMCP가 별도의 컨텍스트를 생성하는 대신 프로세스 내 변수, 임포트 및 키워드 검색 순서를 재사용할 수 있습니다.

MCP 서버 설정

Debug Bridge에 전달된 환경 변수가 포함된 예제 구성

UV 사용

{
  "servers": {
    "RobotMCP": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "src/robotmcp/server.py"],
      "env": {
        "ROBOTMCP_ATTACH_HOST": "127.0.0.1",
        "ROBOTMCP_ATTACH_PORT": "7317",
        "ROBOTMCP_ATTACH_TOKEN": "change-me",
        "ROBOTMCP_ATTACH_DEFAULT": "auto"
      }
    }
  }
}

Docker 사용

{
  "servers": {
    "RobotMCP": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/manykarim/rf-mcp:latest", "uv", "run", "robotmcp"],
      "env": {
        "ROBOTMCP_ATTACH_HOST": "127.0.0.1",
        "ROBOTMCP_ATTACH_PORT": "7317",
        "ROBOTMCP_ATTACH_TOKEN": "change-me",
        "ROBOTMCP_ATTACH_DEFAULT": "auto"
      }
    }
  }
}

Robot Framework 설정

디버깅 중인 스위트 내부에서 라이브러리를 임포트하고 서브 루프를 시작합니다:

*** Settings ***
Library    robotmcp.attach.McpAttach    token=${DEBUG_TOKEN}

*** Variables ***
${DEBUG_TOKEN}    change-me

*** Test Cases ***
Serve From Debugger
    MCP Serve    port=7317    token=${DEBUG_TOKEN}    mode=blocking    poll_ms=100
    [Teardown]    MCP Stop
  • MCP Serve port=7317 token=${TOKEN} mode=blocking|step poll_ms=100 — HTTP 서버를 시작하고(실행 중이 아닌 경우) 브리지 명령을 처리합니다. 키워드 본문 실행 중에는 mode=step을 사용하여 대기 중인 요청을 정확히 하나만 처리합니다.

  • MCP Stop — 서브 루프 종료를 알립니다(스위트에서 또는 RobotMCP attach_stop_bridge를 통해 원격으로 사용).

  • MCP Process Once — 대기 중인 요청 하나를 처리하고 즉시 반환합니다. 스위트가 테스트 작업 사이에 폴링할 때 유용합니다.

  • MCP Start — 이전 버전과의 호환성을 위한 MCP Serve의 별칭입니다.

브리지는 기본적으로 127.0.0.1에 바인딩되며 클라이언트가 X-MCP-Token 헤더에 공유 토큰을 보내기를 기대합니다.

RobotMCP 연결 구성

환경 변수를 통해 브리지 연결 세부 정보를 제공하여 연결 라우팅으로 robotmcp.server를 시작합니다(토큰은 스위트와 일치해야 함):

export ROBOTMCP_ATTACH_HOST=127.0.0.1
export ROBOTMCP_ATTACH_PORT=7317          # optional, defaults to 7317
export ROBOTMCP_ATTACH_TOKEN=change-me    # optional, defaults to 'change-me'
export ROBOTMCP_ATTACH_DEFAULT=auto       # auto|force|off (auto routes when reachable)
export ROBOTMCP_ATTACH_STRICT=0           # set to 1/true to fail when bridge is unreachable
uv run python -m robotmcp.server

ROBOTMCP_ATTACH_HOST가 설정되면 execute_step(..., use_context=true) 및 기타 컨텍스트 인식 도구는 먼저 라이브 디버그 세션 내에서 실행을 시도합니다. 새 MCP 도구를 사용하여 모든 에이전트에서 브리지를 관리합니다:

  • attach_status — 브리지의 구성, 연결 가능성 및 진단 정보를 보고합니다(/diagnostics).

  • attach_stop_bridge — /stop 명령을 보내며, 이는 디버깅 중인 스위트에서 MCP Stop을 트리거합니다.


🎪 예제 워크플로우

🌐 웹 애플리케이션 테스트(BDD)

프롬프트:

Use RobotMCP to create a test suite and execute it step wise.
It shall:

- Open https://demoshop.makrocode.de/
- Add item to cart
- Assert item was added to cart
- Add another item to cart
- Assert another item was added to cart
- Checkout
- Assert checkout was successful

Execute step by step and build final test suite afterwards
Create in BDD style and use Keywords with embedded arguments when applicable

결과: Given/When/Then 키워드, 임베디드 인자 및 추출된 변수가 포함된 BDD 스타일 Robot Framework 테스트 스위트.

🌐 웹 애플리케이션 테스트(데이터 기반)

프롬프트:

Use RobotMCP to create a test suite and execute it step wise.
It shall:

- Open https://saucedemo.com
- Login with different user/password combinations
- Assert message or login

Execute step by step and build final test suite afterwards
Create in datadriven style and add multiple test rows with different scenarios
Use Test Template setting in suite

결과: 각 로그인 시나리오에 대한 Test Template 및 매개변수화된 행이 포함된 데이터 기반 Robot Framework 테스트 스위트.

📱 모바일 앱 테스트

프롬프트:

Use RobotMCP to create a TestSuite and execute it step wise.
It shall:
- Launch app from tests/appium/SauceLabs.apk
- Perform login flow
- Add products to cart
- Complete purchase

Appium server is running at http://localhost:4723
Execute the test suite stepwise and build the final version afterwards.

결과: AppiumLibrary 키워드와 디바이스 기능이 포함된 모바일 테스트 스위트.

🔌 API 테스트

프롬프트:

Read the Restful Booker API documentation at https://restful-booker.herokuapp.com.
Use RobotMCP to create a TestSuite and execute it step wise.
It shall:

- Create a new booking
- Authenticate as admin
- Update the booking
- Delete the booking
- Verify each response

Execute the test suite stepwise and build the final version afterwards.

결과: 적절한 오류 처리가 포함된 RequestsLibrary를 사용하는 API 테스트 스위트.

🧪 XML/데이터베이스 테스트

프롬프트:

Create a xml file with books and authors.
Use RobotMCP to create a TestSuite and execute it step wise.
It shall:
- Parse XML structure
- Validate specific nodes and attributes
- Assert content values
- Check XML schema compliance

Execute the test suite stepwise and build the final version afterwards.

결과: Robot Framework의 XML 라이브러리를 사용하는 XML 처리 테스트.


🔍 MCP 도구

rf-mcp는 기능을 목적별로 그룹화된 MCP 도구로 에이전트에 노출합니다: 계획 및 오케스트레이션, 세션 및 실행, 검색 및 문서화, 관찰 가능성 및 진단, 스위트 수명 주기, 로케이터 가이드, 시각적 검증, 그리고 선택적 영구 메모리.

전체 참조: docs/MCP_TOOLS.md — 모든 도구의 매개변수, 반환 값 및 사용 시점을 포함합니다. 에이전트가 이러한 설명을 직접 읽으므로 수동으로 호출할 필요가 거의 없습니다.

🧪 BDD 및 데이터 기반 테스트 생성

BDD 스타일(Given/When/Then)

프롬프트:

Use RobotMCP to create a test suite and execute it step wise.
It shall:

- Open https://demoshop.makrocode.de/
- Add item to cart
- Assert item was added to cart
- Add another item to cart
- Assert another item was added to cart
- Checkout
- Assert checkout was successful

Execute step by step and build final test suite afterwards
Create in BDD style and use Keywords with embedded arguments when applicable

결과: RobotMCP가 각 단계를 실행하고 작업 사이에 DOM을 검사하며 Given/When/Then 키워드가 포함된 BDD 스타일 스위트를 생성합니다:

*** Test Cases ***
Demoshop BDD Purchase Workflow
    Given the demoshop is open
    When the user adds the first product to cart
    Then the cart should contain 1 item
    When the user adds the second product to cart
    Then the cart should contain 2 items
    When the user proceeds to checkout
    And the user fills in the checkout form
    And the user places the order
    Then the order confirmation should be displayed

*** Keywords ***
the demoshop is open
    New Browser    chromium
    New Context
    New Page    ${DEMOSHOP_URL}

the user adds the first product to cart
    Click    ${FIRST_PRODUCT_BUTTON}

단계별 실행 중에는 execute_step에서 bdd_group 및 bdd_intent를 사용하여 단계가 동작 키워드로 그룹화되는 방식을 제어합니다. 마지막에 build_test_suite(bdd_style=True)를 호출합니다.

데이터 기반 템플릿

프롬프트:

Use RobotMCP to create a test suite and execute it step wise.
It shall:

- Open https://saucedemo.com
- Login with different user/password combinations
- Assert message or login

Execute step by step and build final test suite afterwards
Create in datadriven style and add multiple test rows with different scenarios
Use Test Template setting in suite

결과: RobotMCP가 명명된 데이터 행이 포함된 Test Template을 사용하여 매개변수화된 스위트를 구축합니다:

*** Settings ***
Library         Browser
Test Template   Verify Login

*** Test Cases ***          USERNAME            PASSWORD        EXPECTED
Valid User                  standard_user       secret_sauce    Products
Locked Out User             locked_out_user     secret_sauce    locked out
Invalid Password            standard_user       wrong_pass      Username and password do not match

manage_session(action="start_test", template="Verify Login")을 사용하여 템플릿 키워드를 설정한 다음 manage_session(action="add_data_row", test_name="Valid User", args=["standard_user", "secret_sauce", "Products"])을 사용하여 각 행을 추가합니다.


🧠 소형 LLM 최적화

RobotMCP는 소형 및 중형 LLM(8K-32K 컨텍스트 창)을 위한 최적화를 포함하여 토큰 오버헤드를 줄이고 도구 호출 정확도를 향상시킵니다.

동적 도구 프로필

워크플로우 단계에 따라 LLM에 표시되는 도구를 제어합니다. 소형 모델은 더 적고 더 간결한 도구를 볼 수 있습니다:

manage_session(action="set_tool_profile", tool_profile="browser_exec")

프로필: browser_exec, api_exec, discovery, minimal_exec, full. 도구 설명 오버헤드를 ~7,000에서 ~1,000 토큰으로 줄입니다. ROBOTMCP_TOOL_PROFILE 환경 변수를 통해서도 설정할 수 있습니다.

응답 상세 수준

토큰 소비를 줄이기 위해 응답 상세 수준을 제어합니다. 대부분의 도구에서 detail_level 매개변수를 통해 사용할 수 있습니다:

  • minimal – 필수 출력만(60-80% 토큰 절감)

  • standard – 균형 잡힌 출력(기본값)

  • full – 완전한 상세 출력

ROBOTMCP_OUTPUT_VERBOSITY=compact|standard|verbose를 통해 기본값을 설정합니다.

델타 상태 응답

get_session_state는 마지막 호출 이후 변경된 섹션만 반환하는 증분 응답을 지원합니다:

# First call returns full state (version 1):
get_session_state(session_id="...", sections=["variables", "page_source"])

# Subsequent calls return only what changed:
get_session_state(session_id="...", mode="delta", since_version=1)

mode="auto"(기본값)에서 서버는 이전 버전이 존재할 때 자동으로 델타 응답을 반환합니다. 이는 단계 사이에 변수나 페이지 콘텐츠만 변경되는 다단계 워크플로우에서 토큰 사용량을 50-80% 줄입니다.

아티팩트 외부화

대용량 출력(HTML 페이지 소스, 실행 로그, 스택 트레이스)은 응답에 인라인되는 대신 가져올 수 있는 아티팩트로 자동 외부화됩니다:

# Response includes artifact_id instead of full content:
{"result": "...", "artifact_id": "abc123", "artifact_hint": "Full page source available via fetch_artifact"}

# Fetch when needed:
fetch_artifact(artifact_id="abc123")

이를 통해 필요 시 전체 출력에 대한 액세스를 유지하면서 도구 응답을 간결하게 유지합니다.

의도 액션

intent_action 도구는 일반적인 테스트 작업을 위한 라이브러리 독립적 진입점을 제공합니다. LLM이 라이브러리별 키워드 이름과 로케이터 구문을 알도록 요구하는 대신 의도를 표현합니다:

intent_action(intent="click", target="text=Login", session_id="...")
intent_action(intent="fill", target="#username", value="testuser", session_id="...")

서버는 세션의 활성 라이브러리(Browser, SeleniumLibrary 또는 AppiumLibrary)에 대한 올바른 키워드 및 로케이터 형식으로 의도 + 대상을 해석합니다.

탐색 폴백

브라우저나 페이지가 열려 있지 않아 intent_action(intent="navigate")가 실패하면 서버가 자동으로 브라우저/페이지를 열고 재시도합니다:

  • Browser 라이브러리: New Browser + New Page를 실행합니다(브라우저가 존재하면 New Page만 실행)

  • SeleniumLibrary: Open Browser about:blank chrome을 실행합니다

응답에는 fallback_applied: true 및 fallback_steps 수가 포함됩니다. 세션당 2-4회의 도구 호출을 절약합니다.

배치 실행

execute_batch 도구는 단일 MCP 호출에서 여러 키워드를 실행하여 N번의 왕복을 1번으로 줄입니다. 단계는 ${STEP_N} 변수를 통해 이전 단계의 결과를 참조할 수 있습니다:

execute_batch(session_id="...", steps=[
    {"keyword": "Go To", "args": ["https://example.com"]},
    {"keyword": "Get Title", "assign_to": "title"},
    {"keyword": "Should Be Equal", "args": ["${STEP_2}", "Example Domain"]}
], on_failure="recover")

단계가 실패하면 resume_batch를 사용하여 수정 단계를 삽입하고 실패 지점부터 재시도할 수 있습니다.

엄격 모드 힌트

선택자가 여러 요소와 일치하여(Playwright 엄격 모드) Browser Library 키워드가 실패하면 오류 응답에 >> nth=0(0 기반 인덱스) 또는 >> visible=true 선택자 체인을 제안하는 힌트가 실제 키워드 이름과 요소 수를 사용한 구체적인 예제와 함께 포함됩니다.

타입 제약 매개변수

모든 action/mode/strategy 매개변수는 Literal 타입을 사용하여 JSON Schema에서 enum 제약 조건을 생성합니다. 이는 환각된 값(예: action="init" 대신 action="setup")을 제거합니다. 모든 값은 대소문자를 구분하지 않는 입력을 허용합니다.

자동 매개변수 변환

소형 LLM의 일반적인 실수는 서버 측에서 수정됩니다:

  • JSON 문자열화된 배열("[\"Browser\"]")은 네이티브 배열로 파싱됩니다

  • 쉼표로 구분된 문자열("Browser,BuiltIn")은 목록으로 분할됩니다

  • 더 이상 사용되지 않는 키워드(GET)는 현재 동등한 키워드(GET On Session)로 매핑됩니다

지침 템플릿

구성 가능한 서버 수준 지침은 LLM이 "discover-then-act" 패턴을 따르도록 안내합니다. LLM의 성능에 맞는 크기의 템플릿을 선택하세요 — Claude Opus용 minimal(~40 토큰)부터 Claude Haiku용 detailed(~600 토큰)까지. 위의 지침 템플릿을 참조하세요.


🧠 영구 의미 메모리

RobotMCP는 과거 세션에서 학습하고 성공적인 패턴, 로케이터 및 오류 수정을 기억하여 반복 테스트 시나리오의 시행착오를 줄일 수 있습니다.

작동 방식

메모리는 sqlite-vec(벡터 검색) 및 model2vec(256차원 임베딩)으로 구동됩니다. 활성화되면 서버는:

  1. 저장: 각 도구 호출 후 성공적인 단계 시퀀스, 작동하는 로케이터 및 오류→수정 매핑을 저장합니다

  2. 기억: 관련 메모리를 기억하고 도구 응답에 힌트로 주입합니다(예: execute_step 실패에 이전 수정 사항 포함, get_session_state에 이전에 성공한 단계 패턴 포함)

  3. 학습: 세션 간에 학습합니다 — 웜 데이터베이스는 서버 재시작 사이에도 유지됩니다

설치

pip install rf-mcp[memory]
# or
uv pip install rf-mcp[memory]

구성

환경 변수를 통해 활성화합니다:

{
  "servers": {
    "robotmcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "-m", "robotmcp.server"],
      "env": {
        "ROBOTMCP_MEMORY_ENABLED": "true",
        "ROBOTMCP_MEMORY_DB_PATH": "./memory.db"
      }
    }
  }
}

메모리 MCP 도구

메모리가 활성화되면 5개의 추가 도구를 사용할 수 있습니다:

도구

설명

recall_step

이전에 성공한 단계 시퀀스를 기억합니다. 검증된 패턴을 재사용하기 위해 새 테스트 단계를 구축하기 전에 호출합니다.

recall_fix

오류에 대한 알려진 수정 사항을 기억합니다. execute_step가 실패하면 재시도하기 전에 즉시 호출합니다.

recall_locator

UI 요소에 대한 작동하는 로케이터를 기억합니다. 익숙한 요소에 대한 DOM 검사 전에 호출합니다.

store_knowledge

향후 기억을 위해 도메인 지식(예: 사이트 구조, 인증 흐름)을 저장합니다.

get_memory_status

세션 시작 시 메모리 가용성 및 통계를 확인합니다.

응답 증강

메모리 힌트는 기존 도구 응답에 자동으로 주입됩니다 — LLM 협력이 필요 없습니다:

  • execute_step 실패: 이전 수정 사항과 작동하는 로케이터가 오류 응답에 포함됩니다

  • get_session_state: 시나리오에 대해 이전에 성공한 단계 패턴이 포함됩니다

  • analyze_scenario: 과거 세션에서 기억된 단계 시퀀스가 제안됩니다

모든 메모리 조회는 응답 지연 시간에 영향을 주지 않도록 50ms 타임아웃이 있습니다.

벤치마크 결과

qwen/qwen3-coder로 8개 시나리오(각 3회 반복, 총 72회 opencode 호출)에 걸쳐 테스트되었습니다:

시나리오 유형

최상의 결과

메모리 회상률

복잡한 웹 흐름(체크아웃)

호출 -23%, 토큰 -22%

3/3 반복

탐색 중심 브라우징

최적 반복에서 호출 -44%

3/3 반복

API 오류 복구

호출 -3% ±3%(가장 좁은 CI)

3/3 반복

메모리 이점은 과거 로케이터와 단계 시퀀스가 탐색적 도구 호출을 줄여주는 복잡한 다단계 시나리오에서 가장 큽니다.


⚙️ 구성

rf-mcp는 합리적인 기본값으로 실행됩니다. 조정이 필요할 때는 모든 것이 환경 변수로 해결됩니다 — 명령 템플릿, attach 브리지, 출력/토큰 효율, 메모리, 프론트엔드 대시보드, PlatynUI 데스크톱 안전 등.

전체 참조: docs/CONFIGURATION.md — 모든 ROBOTMCP_* 변수의 허용 값과 기본값, 그리고 robotmcp CLI 플래그 및 하위 명령.

🤝 기여

기여를 환영합니다! 시작하는 방법은 다음과 같습니다:

  1. 저장소 포크

  2. 로컬에 포크 클론

  3. 개발 의존성 설치: uv sync

  4. 기능 브랜치 생성

  5. 새 기능에 대한 포괄적인 테스트 추가

  6. 테스트 실행: uv run pytest tests/

  7. 풀 리퀘스트 제출

📝 변경 로그

  • v0.34.0 – 네이티브 데스크톱 자동화(rf-mcp[desktop], PlatynUI, Windows 지원); 프로젝트 자체 라이브러리를 사용하는 프로젝트 인식 설치 프로그램; 더 간결한 에이전트 지침; 콜드 스타트 중단, Windows dry-run 교착 상태 및 생성된 스위트 경로 수정; FastMCP 3에서 도구 프로필 복원

  • v0.31.1 – 패키징 정리(sdist에서 테스트/예제 제외)

  • v0.31.0 – BDD/데이터 기반 생성, 네임스페이스 아키텍처 수정, 영구 메모리, 토큰 71-88% 절감

  • v0.30.1 – FastMCP 3.x 호환성 레이어

  • v0.30.0 – 소형 LLM 최적화(도구 프로필, 의도 액션, 응답 최적화, 타입 제약)

  • v0.29.0 – 명령 템플릿, 다중 테스트 세션, 배치 실행, 스마트 타임아웃

📄 라이선스

Apache 2.0 라이선스 - 자세한 내용은 LICENSE 파일을 참조하세요.


⭐ RobotMCP가 테스트 자동화 여정에 도움이 된다면 GitHub에서 Star를 눌러주세요!

Robot Framework 및 AI 자동화 커뮤니티를 위해 ❤️로 제작되었습니다.

Available Tools

19 tools
analyze_scenarioA

Analyze a natural-language scenario into structured intent and create a session.

WORKFLOW: This is the single front door — your FIRST tool call for any test scenario. It CREATES the session, so do NOT also call manage_session(action="init") for the same scenario (that causes redundant session churn). Reuse the returned session_id in every later call.

What this tool does:

  1. Creates a new session with unique session_id (or reuses provided one)

  2. Analyzes scenario to detect context (web/api/mobile/desktop)

  3. Auto-configures libraries based on scenario text

  4. Returns session_id for use in ALL subsequent tool calls

CRITICAL: Save the session_id from the response and use it in all other tool calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoApplication context (e.g., "web", "mobile", "api", "desktop"); defaults to "web". An explicit context="desktop" DETERMINISTICALLY forces a native desktop (PlatynUI) session regardless of scenario wording — phrasing or word order cannot flip it to mobile/Appium. Use it for Linux/GNOME desktop GUI scenarios.web
scenarioYesHuman-language description of the task to automate.
session_idNoOptional existing session id to reuse; if omitted, a new one is created.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden — and it mostly succeeds. It discloses the mutation behavior prominently (CREATES a session), explains the side effects of misuse (redundant session churn), and instructs the agent to save and reuse the returned session_id. It could note failure/error behavior, but the key behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with a WORKFLOW block, numbered steps, and a highlighted CRITICAL note, with the key routing information (front door, don't call manage_session) front-loaded. Minor redundancy exists between the WORKFLOW summary and the numbered list, but every section earns its place for an orchestration tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex orchestration tool, the description covers the full workflow: session creation, context detection, library auto-configuration, and session_id reuse across subsequent calls. An output schema exists, so return-value details are not the description's responsibility. The only gap is explicit error/failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with already-rich parameter text, including the deterministic desktop-forcing behavior of the context enum. Baseline 3 applies: the description confirms the workflow relationship to session_id but adds little parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Analyze a natural-language scenario into structured intent and create a session') and explicitly names it as 'the single front door'. It clearly distinguishes itself from the sibling manage_session by warning against redundant session churn, so an agent can tell it apart without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('your FIRST tool call for any test scenario') and explicit when-not-to-use guidance ('do NOT also call manage_session(action="init")'). It names the alternative tool and the failure mode it avoids, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_test_suiteC

Generate a Robot Framework test suite from previously executed steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional test tags.
bdd_styleNoGenerate BDD-style suite with a Keywords section. When True, steps are grouped into behavioral keywords (Given/When/Then) and a ``*** Keywords ***`` section is appended to the generated .robot content.
test_nameYesName for the generated test case.
session_idNoSession containing executed steps; auto-resolves if empty/invalid.
output_pathNoOptional absolute path to persist the generated .robot suite to disk directly (UTF-8; parent directories created). ALWAYS use this to save a suite — do NOT write ``rf_text`` via the ``Create File`` keyword: Robot Framework resolves ``${variables}`` and interprets ``\n``/``\t`` escapes inside the argument, which silently corrupts the suite content (assigned vars collapse to their runtime values, escaped newlines become raw line breaks). Writing here goes through plain file I/O and preserves the generated text byte-for-byte. When set, the response includes ``output_path`` and ``output_bytes`` (or ``output_error`` on a write failure — the build still succeeds).
documentationNoOptional test case documentation.
data_driven_modeNoHow to render data-driven (template) test cases. "auto" (default) — auto-detect: named rows → suite_template, else per_test. "per_test" — [Template] per test case with data rows (current behavior). "suite_template" — Test Template in Settings, each named row is a separate test case with individual pass/fail in reports.auto
include_pre_startNoWhether to adopt exploratory steps executed BEFORE start_test into the generated test body. Default False excludes them (the response reports ``excluded_pre_start_count`` + a summary) so the suite reflects only intended in-test interactions. Set True to preserve the prior adoption behavior.
remove_library_prefixesNoWhether to strip library prefixes from keywords.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that it generates a suite from steps, but omits side effects like file writing (hinted in schema) or whether state is modified. The description adds minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that directly states the core purpose. It is appropriately sized and front-loaded, though it could incorporate more behavioral context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters) and lack of annotations, the description is inadequate. It doesn't explain the generation process, output format (despite an output schema), or edge cases like session_id auto-resolution. The schema fills parameter details, but the description fails to provide overarching usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 9 parameters are thoroughly documented in the schema. The main description does not add any parameter-specific details or clarifications beyond what the schema provides, justifying the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'Generate' and the resource 'Robot Framework test suite' from 'previously executed steps'. It clearly indicates the tool's function and distinguishes it from execution-oriented siblings like run_test_suite, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as run_test_suite or execute_flow. There's no mention of prerequisites, context, or scenarios where this tool is preferred, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_library_availabilityA

Verify that specified Robot Framework libraries can be imported/installed.

Recommended as step 3 after analyze_scenario and recommend_libraries; use the recommended names to avoid unnecessary checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
librariesYesLibrary names to verify (preferably from recommend_libraries output).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It states 'Verify' which implies a read-only check, but also mentions 'imported/installed' without clarifying whether it performs installation or just checks availability. It does not disclose side effects, error behavior, or what happens when a library is missing. This is a significant gap for a tool that may have installation implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with the primary purpose front-loaded in the first sentence and usage recommendation in the second. No superfluous words, concise and scannable, making it easy for an agent to quickly grasp the tool's role.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple one-parameter schema and an output schema, so the description does not need to explain return values. However, it leaves ambiguity about whether the tool only checks or also installs libraries, and what happens for unavailable libraries. Given the lack of annotations, this ambiguity affects completeness. While the usage workflow is clearly defined, the behavioral gap keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a complete description for the 'libraries' parameter, including a preference for using recommend_libraries output (100% schema coverage). The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb 'Verify' and a resource 'specified Robot Framework libraries', clearly indicating the tool checks import/install availability. It does not explicitly name a sibling it is not, but the context of recommendation workflow helps distinguish it from 'recommend_libraries'. Overall, purpose is clear and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends this as step 3 after 'analyze_scenario' and 'recommend_libraries', and advises using recommended names to avoid unnecessary checks. This provides clear when-to-use guidance and implies the tool should be used after library recommendation, not before, effectively routing the agent to the correct workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_batchA

Execute multiple RF keywords in one call with recovery and variable chaining.

Reduces N MCP round-trips to 1. Steps run sequentially; each step's return value is available to later steps via ${STEP_N} references in arguments. Both 0-based (${STEP_0} = first step) and 1-based (${STEP_1} = first step) indexing are accepted. When ambiguous, 1-based is preferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesList of step dicts, each with: - keyword (str, required): RF keyword name - arguments (list[str], optional): Positional arguments, may contain ${STEP_N} (both 0-based and 1-based indexing supported). This is the canonical key (parity with execute_step). The legacy alias ``args`` is also accepted; supplying BOTH with different values is a validation error. - label (str, optional): Human-readable label - timeout (str, optional): Per-step RF timeout (e.g., "10s") - assign_to (str, optional): Variable name to capture return value (e.g., "cart_count") NOTE: batch steps do NOT support ``bdd_group``/``bdd_intent`` — use per-step ``execute_step(bdd_group=..., bdd_intent=...)`` for BDD grouping. A step missing ``keyword`` returns an actionable validation error.
on_failureNoPolicy on step failure: - "stop": abort immediately - "retry": retry without recovery logic - "recover" (default): attempt tiered recovery before giving up On DESKTOP (PlatynUI) sessions, retries are restricted to failures where the input provably never fired (element-not-found); any other desktop failure records immediately instead of blindly re-firing a click/keystroke, and retries run with a capped descriptor-resolution timeout so a bad locator cannot burn the whole budget.recover
session_idYesSession to execute within (must exist or be auto-created).
timeout_msNoTotal batch time budget in milliseconds (1000-600000, default 120000).
max_recovery_attemptsNoMax recovery retries per failed step (1-10, default 2).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses sequential execution, variable chaining via ${STEP_N}, and the 0-based/1-based indexing ambiguity with a preference. It does not elaborate on recovery mechanics beyond 'with recovery', but the schema covers on_failure parameters. The disclosed sequencing and indexing are valuable behavioral insights.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. The first sentence states the core purpose, followed by a clear benefit (round-trip reduction), then precise behavioral details about sequencing and indexing. Every sentence carries necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 5 parameters and existing output schema, the description covers the essential operational context: what it does, how steps chain, and indexing rules. It omits details like failure policies or timeout expectations, but those are documented in the schema parameters, so the description is sufficiently complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the ${STEP_N} indexing nuances (0-based vs 1-based) and the preference when ambiguous, which is not fully specified in the schema's step description. This enriches the semantic understanding of arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes multiple RF keywords in one call, with recovery and variable chaining. It differentiates from single-step siblings like execute_step by emphasizing batch execution and round-trip reduction, though it could more explicitly contrast with execute_flow or other batching tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a batch use case via 'multiple keywords' and 'reduces N MCP round-trips to 1', but it does not explicitly state when to choose this over execute_step (e.g., for single keywords or BDD grouping). The schema notes BDD limitations, but the description itself lacks explicit alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_flowC

Execute structured flow (if/for/try) within a session.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoItems to iterate when structure="for".
rethrowNoWhether to rethrow after except/finally.
item_varNoVariable name to bind each item in for-each loops.item
conditionNoExpression for if/conditional flows.
structureYesFlow type ("if", "for", "try").
try_stepsNoSteps for the try block (when structure="try").
else_stepsNoSteps for the else branch (if).
session_idYesSession id to run the flow in.
then_stepsNoSteps for the main branch (if/loop body/try block).
except_stepsNoSteps for the except block.
finally_stepsNoSteps for the finally block.
max_iterationsNoMaximum iterations for for-each loops.
except_patternsNoError patterns to match for except handling.
stop_on_failureNoWhether to stop loop/branch execution on first failure.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden of disclosing side effects, state changes, and error behavior, but it does not do so. It does not mention that executing a flow may mutate session state, how failures or rethrows behave, or whether partial execution leaves side effects. The schema hints at these behaviors through fields like stop_on_failure and rethrow, but the description itself does not surface them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with the core idea front-loaded and no filler. While it is lean and well ordered, it is also somewhat under-specified for such a complex tool, so it earns a 4 rather than a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter control-flow executor with no annotations and many structure-dependent fields, a one-line description is not enough to guide correct invocation. It does not explain how the structure parameter selects among if/for/try block parameters, what side effects flow execution has on the session, or how errors are handled. The presence of an output schema reduces the return-value burden, but the invocation and execution semantics remain under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 14 parameters, including structure-specific fields like then_steps, except_steps, and max_iterations. The tool description adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Execute'), a resource ('structured flow'), and enumerates the supported flow types ('if/for/try'), while scoping execution to a session. This makes it reasonably distinct from sibling tools like execute_step or execute_batch, though it does not explicitly name or contrast those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use execute_flow versus execute_step, execute_batch, or other siblings. It only states the operation and the session context; there are no exclusions, conditions, or pointers to alternatives, so choosing this tool over its siblings is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_stepB

Execute a single Robot Framework keyword (or Evaluate) within a session.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"keyword" (default) or "evaluate" (runs BuiltIn.Evaluate).keyword
recordNoOverride the record gate that decides whether a successful step is appended to session.steps for build_test_suite output. - None (default): auto-classify. Read-only inspection keywords (Get Title, Log, etc.) are NOT recorded; everything else IS. Carve-outs that always record: ``assign_to`` is set, or a named test is currently open (after start_test). - True: force-record this step regardless of classification. - False: drop this step regardless of classification. The decision is surfaced as ``recorded: bool`` in the response.
keywordYesKeyword name (Library.Keyword supported). Use find_keywords to discover correct keyword names before calling.
argumentsNoKeyword arguments; positional and named (`name=value`) supported.
assign_toNoVariable name(s) to assign the result to (string or list). CRITICAL: Use this to capture results for later steps. Example: assign_to="response" captures ${response} variable
bdd_groupNoOptional group name for BDD keyword generation. Steps with the same bdd_group are clustered into a single behavioral keyword when build_test_suite(bdd_style=True) is called. Example: bdd_group="add product to cart"
bdd_intentNoBDD intent prefix for the group: "given", "when", "then", "and", "but". Used with bdd_group to assign Given/When/Then prefixes in the generated BDD test suite.
expressionNoExpression for mode="evaluate"; falls back to keyword/first argument.
session_idNoSession to execute in; resolves default if omitted.default
timeout_msNoOptional timeout in milliseconds for keyword execution. If not provided, uses smart defaults based on keyword type: - Element actions (Click, Fill): 5000ms - Navigation (Go To, New Page): 60000ms - Read operations (Get Text): 2000ms - API calls (GET, POST): 30000ms Set to 0 or negative to disable timeout.
use_contextNoWhether to run inside RF native context; defaults via config/attach.
detail_levelNoResponse verbosity: "minimal" | "standard" | "full".minimal
scenario_hintNoOptional scenario text to auto-configure libraries on first call.
raise_on_failureNoIf True, raise on failure; otherwise return error in payload.
pre_validate_timeout_msNoOverride the pre-validation gate's timeout for this single call. Pre-validation is the fast ~500ms-default check that verifies an element is visible / enabled before the keyword runs; it auto-retries once with a 200ms backoff on transient failures. - None (default): use ``ExecutionConfig.PRE_VALIDATION_TIMEOUT`` (500ms) for slow-loading pages this is sometimes too tight. - A positive int (e.g. 2000): extend the gate to this many milliseconds for this call only. Useful when a page legitimately takes ~1–2s to settle. - 0 or negative: skip pre-validation entirely for this call (last resort — also disables the keyword timeout). Failure responses include a ``pre_validate_timeout_hint`` entry explaining how to use this when the gate trips.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the purpose and does not reveal side effects, error handling, or return behavior. While schema parameter descriptions cover things like recording and timeouts, the top-level description itself lacks any behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the core action with zero waste. It is appropriately sized and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 15 parameters, an output schema, and rich sibling tools, the description is too minimal. It does not synthesize the overall behavior (e.g., how steps are recorded for build_test_suite, BDD grouping, or when to use this over execute_batch). The schema covers details, but the high-level context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with detailed descriptions for all 15 parameters. The one-sentence description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it executes a single Robot Framework keyword or Evaluate within a session, distinguishing it from siblings like execute_batch or execute_flow that handle multiple steps. The verb 'Execute' and resource 'single Robot Framework keyword' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. It mentions 'within a session' but provides no guidance on scenarios where execute_batch or execute_flow would be preferable. The only hint appears in the schema description for the keyword parameter, but that is not part of the tool description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_keywordsA

Discover Robot Framework keywords using multiple strategies.

WHEN TO USE THIS TOOL:

  • ALWAYS before calling execute_step with an unfamiliar keyword

  • When you're unsure of exact keyword name or spelling

  • To discover what keywords are available in imported libraries

  • When error says "No keyword with name 'X' found"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional maximum number of results to return.
queryYesSearch text or intent description. Examples: "click a button", "validate json", "get*request"
contextNoScenario context (e.g., "web", "mobile", "api") used by semantic discovery.web
strategyNoDiscovery approach: - "semantic": Hybrid keyword search combining name/doc pattern matching, tag/action-class classification, and (when installed) sentence-transformers embedding similarity. For best semantic ranking, install the optional extra: ``uv add robotmcp[semantic]``. Without the extra, falls back to pattern + tag + difflib SequenceMatcher ranking; the strategy is still useful but ranking quality is reduced. - "pattern": Glob/regex matching (best when you know partial name) - "catalog": List all available keywords. This is a LITERAL substring filter on keyword/library names — a multi-word natural-language query will return 0; use library_name= to list a library (e.g. "PlatynUI"/"PlatynUI.BareMetal"), or strategy="semantic" for intent matching. - "session": List keywords from session's loaded librariessemantic
session_idNoRequired for strategy="session" to search the live RF namespace.
library_nameNoOptional library filter applied to ALL strategies. When set, restricts results to the named library and its compatible siblings (e.g., library_name="Browser" excludes SeleniumLibrary but keeps BuiltIn, Collections, String). Takes precedence over the session's explicit_library_preference when both are present. Catalog strategy additionally scopes the underlying lookup to this library.
current_stateNoOptional state payload to improve semantic matching.
strict_libraryNoOBS-33 — when True AND a library preference is set (via ``library_name`` or session ``explicit_library_preference``), exclude EVERY library that isn't the preferred one. Default behaviour (False) preserves "compatible siblings" — BuiltIn / Collections / String / DateTime etc. remain visible alongside the preferred library. Use strict mode to scope discovery tightly to a single library (e.g., pattern ``"Get*"`` + ``library_name="Browser"`` + ``strict_library=True`` → Browser keywords only, no BuiltIn helpers).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. The detailed strategy parameter documentation discloses important behavior: semantic search has an optional dependency and falls back to pattern matching when not installed, catalog strategy is a literal substring filter that returns 0 for multi-word natural-language queries, and session strategy requires a session_id. It does not explicitly state read-only/no-side-effects, but 'Discover' plus the described search mechanics make the behavior clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, immediately followed by actionable usage guidance. The long parameter documentation is dense but each part earns its place given the tool's complexity, and no redundant or filler text is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters and an output schema, but the description covers all necessary context: when to call it, how each strategy behaves, library filtering, strict mode, and session requirements. An agent can correctly invoke this tool without needing to infer missing information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the parameter descriptions go far beyond names. Each strategy is explained with its intended use and limitations, library_name semantics clarify sibling compatibility and precedence, and strict_library is described with a concrete example. This gives the agent everything needed to choose parameter values correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Discover Robot Framework keywords using multiple strategies.' It clearly distinguishes this discovery/search tool from execution tools like execute_step and detail tools like get_keyword_info by framing the tool as the way to find keywords before executing them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit 'WHEN TO USE THIS TOOL' section with concrete triggers such as 'ALWAYS before calling execute_step with an unfamiliar keyword' and when an error says keyword not found. It does not explicitly name alternative tools for cases like retrieving details for a known keyword, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_keyword_infoA

Get keyword/library docs or parse a signature. Call this before execute_step when you know the keyword name but not its arguments.

Modes: "keyword" (default — document one keyword), "library" (list a library's keywords), "session" (resolve against the live session namespace), "parse" (parse a signature string). Pass session_id to scope the lookup to that session's libraries.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "keyword" (default), "library", "session", or "parse".keyword
argumentsNoOptional arguments to parse when mode="parse".
session_idNoOptional session id. - mode="keyword" / "global" (OBS-19): when provided without ``library_name``, restricts the keyword lookup to libraries imported in that session (plus neutral helpers like BuiltIn, Collections). When the keyword exists only in other libraries, the response carries a library-mismatch error + plugin-generated alternative hint instead of the keyword doc. Sessions without ``session_id`` get the global lookup (cross-library matches[]). - mode="session" / "namespace": required to address the live RF namespace. - **Externalisation gate (OBS-21)**: any mode with ``session_id`` provided enables artifact externalisation for large payloads (``library.doc``, ``library.keywords``, ``keyword.doc``, ``matches``). Without ``session_id``, payloads stay inline regardless of size — there's no artifact store to write to, so sessionless callers get the full content. Preserves backwards compat.
keyword_nameNoKeyword to document (required for modes "keyword"/"session"/"parse").
library_nameNoLibrary to document (required for mode "library"; optional for keyword mode — explicit per-call scope that takes precedence over session-derived scope).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does explain the modes and session scoping, but it does not explicitly state that it is a read-only operation or disclose potential behaviors like the library-mismatch error and artifact externalisation (though these are detailed in the schema). The description adds some context but not a comprehensive behavioral profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences and a list of modes. The primary purpose is front-loaded, and every sentence contributes. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, multiple modes) and the presence of a detailed output schema and exhaustive schema descriptions, the description is sufficient. It covers the primary use case and mode enumeration. It omits some nuances (e.g., externalisation) but those are covered in the schema, so the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying the modes and the role of session_id (e.g., scoping the lookup), but it does not go deeply beyond what the schema already documents. It meets but does not exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get keyword/library docs or parse a signature') with a concrete verb and resource. It also enumerates distinct modes, making the tool's scope unambiguous and distinguishing it from other lookup tools like find_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use: 'Call this before execute_step when you know the keyword name but not its arguments.' It also lists modes, which implicitly guide when each is appropriate. This is clear, actionable guidance with no reliance on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_locator_guidanceA

Provide locator/selector guidance for Browser, SeleniumLibrary, AppiumLibrary, PlatynUI.BareMetal, or RequestsLibrary.

For API testing, call with library="requests" (or "api") to get a RequestsLibrary request/response cookbook — session setup, response-field access (${resp.json()["field"]}), the $resp-in-Evaluate rule, Status Should Be, JSON body/headers, the Cookie token header, and expected_status= for non-2xx — BEFORE writing Evaluate-based assertions.

For VISUAL validation, call with library="visual" (or "screenshot") to learn WHEN a screenshot beats the DOM/ARIA tree (canvas/image text, layout/overlap, obscured elements, color, charts) and the dual read-back pattern — useful for any UI library (Browser/Selenium/Appium/PlatynUI) when a multimodal model drives rf-mcp.

ParametersJSON Schema
NameRequiredDescriptionDefault
libraryNoTarget library ("Browser", "SeleniumLibrary", "AppiumLibrary", "PlatynUI.BareMetal", or "RequestsLibrary"/"api"). Case-insensitive.browser
keyword_nameNoOptional keyword name for context-specific hints.
error_messageNoOptional error text to tailor guidance (e.g., from a failed keyword).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It explains the tool's action ('provide guidance') but does not disclose side effects, return format (though output schema exists), or any limitations. It is not misleading, but it does not add behavioral context beyond the basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loading the core purpose and then detailing two important use cases. It is somewhat long but each sentence provides useful information, and the sections are clearly separated. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the presence of an output schema, covers the main usage scenarios effectively. It explains why and when to use it for API and visual cases, which are the most specialized. The general case (any of the listed libraries) is mentioned but could be slightly more elaborated, yet it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value for the `library` parameter by specifying aliases ('requests'/'api', 'visual'/'screenshot') and detailing what guidance each subset includes (API cookbook contents, visual validation scenarios). This enriches the schema's basic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: providing locator/selector guidance for specific libraries (Browser, SeleniumLibrary, etc.). It distinguishes itself from siblings by highlighting specific use cases for API testing and visual validation, making it obvious when this tool is relevant versus others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance for two major scenarios: API testing (library='requests') and visual validation (library='visual'), including details like 'BEFORE writing Evaluate-based assertions.' However, it does not explicitly state when NOT to use it or mention alternatives beyond siblings, though the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_stateC

Retrieve aggregated session state for debugging and visibility.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
sectionsNoSpecific data blocks to include (e.g., summary, page_source, variables, application_state, ui_tree). ui_tree (desktop/PlatynUI sessions only): accessibility-tree snapshot. Lists applications; pass application names via elements_of_interest to expand their subtrees (bounded depth, ADR-025).
session_idYesActive session identifier to inspect.
state_typeNoType of application state to fetch when requesting application_state (dom|api|database|all).all
since_versionNo
dom_chunk_sizeNoMaximum size of each DOM chunk when streaming is enabled (minimum 1024 bytes).
include_dom_streamNoChunk large page_source payloads into page_source_stream entries for easier transport.
include_reduced_domNoWhether to include lightweight semantic DOM (ARIA snapshots) for quick inspection.
elements_of_interestNoTargeted element identifiers passed to application state collectors.
page_source_filteredNoWhen True, returns sanitized/filtered DOM text instead of the full source.
page_source_filtering_levelNoFiltering aggressiveness for DOM output (standard|aggressive).standard

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It implies a read-only inspection ('Retrieve') and mentions debugging, but does not explicitly state non-mutating behavior, performance implications, or any side effects. The word 'retrieve' hints at safety but is not declared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single 10-word sentence, which is extremely concise but under-specified for a tool with 11 parameters. While it has no fluff, it is not appropriately sized for the tool's complexity, missing necessary operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, modes, streaming options), the description is far from complete. It does not define 'aggregated', explain deltas vs full state, or mention any configuration nuances. The output schema exists, but the behavior and semantics of the tool are largely undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 82%, so most parameters are documented in the schema. The description adds 'aggregated' to clarify the output nature, but does not explain undocumented parameters like mode and since_version. The minimal description does not compensate for these gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Retrieve') and resource ('aggregated session state') with a stated purpose ('for debugging and visibility'). It is distinct from siblings like manage_session which suggests management rather than read-only inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as manage_session or execute_flow. The description gives a high-level purpose but no conditions, exclusions, or prerequisites for invoking this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

intent_actionA

Execute a high-level intent that auto-resolves to the correct library keyword.

Valid intents: navigate, click, fill, hover, select, assert_visible, extract, wait_for.

Also accepted but DEPRECATED:

  • extract_text — equivalent to extract with mode="text". The extract verb is the canonical mode-aware getter (text / attribute / count / value / url / title) and additionally surfaces extracted_value at the top level of the response. extract_text will be removed in a future release; prefer intent="extract" for new code.

The intent is resolved based on the session's active library (Browser/SeleniumLibrary/AppiumLibrary).

ParametersJSON Schema
NameRequiredDescriptionDefault
nthNoZero-based nth-match index. Disambiguates when multiple elements match the same locator (e.g., an id duplicated across mobile vs desktop nav). Browser library appends ``>> nth=<n>``; SeleniumLibrary appends ``:nth-of-type(<n+1>)`` for CSS locators only (other locator types are unaffected and log a debug-level warning).
modeNoFor ``intent="extract"`` only. Selects what to read from the page; ignored for other intents. "text" — element text content (default) "attribute" — element attribute value (requires attribute_name) "count" — number of matching elements (multi-match OK) "value" — DOM property "value" (input values) "url" — current page URL (no target needed) "title" — current page title (no target needed) The extracted value is surfaced as ``result["extracted_value"]`` and assigned to ``assign_to`` if provided. mode="count" additionally skips pre-validation for this call — counting is the only mode where matching zero/multiple elements is the expected outcome rather than a failure.text
forceNoUse when: the element is visible but Playwright reports it "blocked by another element" — overlay, sticky header, cookie-consent banner, modal backdrop, animation still running. Symptom: ``Click intercepted`` or ``element is not stable`` / ``outside of the viewport`` errors despite the element appearing correct in the ARIA snapshot. Example: a "Submit" button covered by a sticky consent banner the user can't dismiss programmatically. What it does: for a Browser-library click intent, swaps ``Click`` for ``Click With Options force=True``, which skips Playwright's actionability checks. For other libraries / intents whose mapping declares no ``force_keyword``, the flag is silently ignored. Caveat: do NOT use ``force=True`` to drive elements that are genuinely hidden (display:none, visibility:hidden) — that's an anti-pattern; the resulting click won't behave like a real user click. Prefer natural locators first; fall through to ``force=True`` only when an overlay is the genuine cause.
matchNoSelect-match strategy for the ``select`` intent. ``"label"`` (default) - match by visible option text. Mirrors RF semantics for ``Select Options By label``. ``"value"`` - match by ``<option value="X">`` attribute. ``"index"`` - match by zero-based integer index. ``"text"`` - synonym for ``"label"`` (most libraries). ``"auto"`` - OPT-IN heuristic. Numeric value -> ``"value"``, otherwise ``"label"``. Use with care: numeric visible labels (years, amounts) mis-route. For SeleniumLibrary, this also picks the dispatched keyword (``Select From List By Label`` / ``Value`` / ``Index``). Ignored for non-select intents.label
valueNoValue for fill/select intents
commitNoUse when: the page uses Vue, React, Angular reactive forms, jQuery validate, idealForms, formvalidation.io, or any framework that gates validation on the DOM ``change`` event. Symptom: a form submit is rejected with a "required" or validation error despite every visible field appearing correctly filled; the framework's internal model still thinks the inputs are empty because Playwright's ``fill`` didn't fire a real ``change``. What it does: after a successful Browser-library FILL, dispatches a real DOM ``change`` event on the target via Browser's ``Dispatch Event`` keyword. Off by default — the follow-up is best-effort and any failure is logged and ignored (it never escalates a successful fill into a failed step). No effect for non-FILL intents, non-Browser libraries, or failed fills.
intentYesAction verb (e.g. "click", "navigate", "fill", "extract")
targetNoLocator or URL (e.g. "#submit", "text=Login", "https://example.com"). Optional for extract mode="url"/mode="title".
optionsNoAdditional options (e.g. {"timeout": "10s"})
assign_toNoVariable name to capture result (esp. useful for extract: the extracted text/count/attribute is assigned to this var).
session_idNoSession to execute against (uses default if not provided)
detail_levelNoResponse detail levelstandard
attribute_nameNoRequired when ``intent="extract"`` and ``mode="attribute"``; the HTML attribute name to read (e.g. ``"href"``, ``"data-testid"``, ``"value"``). Ignored for other modes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the intent is resolved based on the session's active library, lists valid intents, and details the deprecation of extract_text. It does not explicitly state whether operations can be mutating (e.g., clicks, fills) or require permissions, but it does give substantive behavior context. A 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is about 200 words, well-structured with paragraphs and bullet-like lists. It front-loads the purpose and valid intents, then addresses deprecation. It is not overly verbose and conveys key information efficiently, though it could be slightly tightened. A 4 reflects good organization without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the extremely detailed schema (100% coverage) and an output schema, provides a complete picture. It explains the intent resolution, deprecation, and library-dependent behavior. Nothing critical is missing for an agent to call this tool correctly, especially given the parameter-rich schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description itself focuses on the intent mechanism and deprecation, not on individual parameters. All parameter meanings are already exhaustively documented in the schema (mode, force, commit, match, etc.). The description adds no new parameter semantics beyond what the schema provides, hence the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Execute') and resource ('high-level intent that auto-resolves to the correct library keyword'), and lists valid intents. It is clear and not a tautology, though it does not explicitly differentiate from sibling tools like execute_step or execute_flow, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives. It only mentions the deprecated extract_text and prefers extract, but does not say when to choose intent_action over execute_step, execute_flow, or other siblings. No when-to-use or when-not-to-use guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_attachC

Inspect or control attach bridge configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoOne of: - "status" (default): Check bridge configuration and health - "stop": Send stop command to bridge (sets stop flag) - "cleanup"/"clean": Clean expired sessions and check bridge health - "reset"/"reconnect": Stop bridge and clean all local sessions - "disconnect_all"/"terminate"/"force_stop": Force stop bridge and terminate allstatus

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry the full burden of disclosing behavioral traits. 'Inspect or control' hints at mutation but does not disclose the potentially destructive force-stop/terminate/disconnect-all actions, side effects, or reversibility. The action enum documents these, but the description itself is silent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise, front-loaded sentence with no filler. It could be slightly more informative about destructive behavior, but as a high-level statement it is efficiently worded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich action enum and presence of an output schema cover much of what an agent needs to invoke the tool, but the top-level description still lacks usage context and safety warnings for a tool with highly destructive actions. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is 100% covered by schema descriptions with an exhaustive enum and per-action semantics, so the description does not need to add parameter detail. It also adds none, which is acceptable given the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Inspect or control attach bridge configuration' names a specific verb and resource, making the tool's scope clear. It is not tautological and the 'attach bridge' resource distinguishes it from the sibling session/library tools, though it does not explicitly reference them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus manage_session or the other siblings, no mention of the default action, and no exclusions. The only usage hints come from the action enum in the schema, which the description itself does not surface.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_library_pluginsC

Inspect or reload library plugins.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoOne of "list", "reload", or "diagnose".list
plugin_nameNoPlugin name when action="diagnose".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of explaining behavior. It implies reload is a mutating operation and inspect is non-mutating, but it does not disclose side effects, reversibility, permission requirements, or what diagnose actually does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four words with no filler, so it is very concise and front-loaded. However, the brevity creates ambiguity by substituting 'inspect' for the schema's more specific 'list' and 'diagnose' actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three distinct actions and no annotation coverage, a single generic sentence is not enough. An agent cannot tell what diagnose entails, what reload's consequences are, or when to reach for this tool instead of a sibling. The output schema covers return shape but not these behavioral and usage gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, and the schema already documents both parameters, including the action enum and the conditional plugin_name. The description adds no parameter-specific meaning, but the baseline of 3 is appropriate because the schema handles the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource ('library plugins') and high-level operations ('inspect or reload'), giving a general sense of purpose. However, it collapses the three concrete actions in the schema (list, reload, diagnose) into two umbrella verbs, and it does not explicitly mention 'diagnose' as a distinct operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool or how to choose among list, reload, and diagnose. There is no mention of alternatives or exclusions, so the agent must infer usage solely from the schema enum and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_sessionA

Manage session lifecycle: initialize, configure libraries/variables, and organize tests.

For a NEW scenario, prefer analyze_scenario — it is the front door that CREATES the session (and auto-configures libraries). Use manage_session for explicit session ops on an existing session (importing extra libraries/resources/variables, multi-test structure). Do NOT call action="init" right after analyze_scenario — the session already exists; that only causes redundant churn.

Workflows: Single test: analyze_scenario -> execute_step (repeat) -> build_test_suite Multi-test: analyze_scenario -> set_suite_setup -> start_test -> execute_step (repeat) -> end_test -> start_test -> ... -> build_test_suite (action="init" is the explicit alternative when you are NOT starting from analyze_scenario, e.g. driving a bare session directly.)

Actions and parameters (session_id is always required):

init             - Create session and load libraries (explicit entry; for a new
                   scenario prefer analyze_scenario instead).
                   Params: libraries (list of library names),
                           variables (dict or list to pre-set).

import_library   - Add a library to an existing session.
                   Params: library_name, args (constructor args), alias.

import_resource  - Import a Robot Framework resource file.
                   Params: resource_path, args.

set_variables    - Set variables in the session.
                   Params: variables (dict {"NAME": "value"} or list ["NAME=value"]),
                           scope ("test" | "suite" | "global", default "suite").

import_variables - Load variables from a Python variable file.
                   Params: variable_file_path, args (passed to get_variables()).

start_test       - Begin a named test (enables multi-test mode). Local mode only.
                   Params: test_name (required),
                           test_documentation, test_tags,
                           test_setup (dict {"keyword": "...", "arguments": [...]}),
                           test_teardown (same format as test_setup).
                   Alias: start_task.

end_test         - End the current test. Local mode only.
                   Params: test_status ("pass" or "fail", default "pass"),
                           test_message (optional error description).
                   NOTE: test_status and test_message are session tracking metadata.
                   They do NOT affect the .robot file generated by build_test_suite.
                   Alias: end_task.

add_data_row     - Add a data row to the current data-driven (template) test.
                   Requires an active test with template set via start_test.
                   Params: args (list of values matching the template keyword's [Arguments]).
                   Alias: data_row.
                   Example:
                     manage_session(action="start_test", test_name="Cart Test",
                                  template="Add And Verify Product")
                     manage_session(action="add_data_row", args=["Backpack", "1", "$29.99"])
                     manage_session(action="add_data_row", args=["Bike Light", "2", "$39.98"])
                     manage_session(action="end_test")
                   The data rows appear under [Template] in the generated .robot file.

list_tests       - List all tests in the session with their status and step counts.
                   Params: (none).

set_suite_setup    - Set a suite-level setup keyword (appears in *** Settings ***).
                     Params: keyword (required), args (keyword arguments).

set_suite_teardown - Set a suite-level teardown keyword (appears in *** Settings ***).
                     Params: keyword (required), args (keyword arguments).

Returns: Dict with success, session_id, and action-specific details. On failure: error and guidance fields are present.

Examples: Initialize session with libraries: manage_session(action="init", session_id="s1", libraries=["Browser", "BuiltIn", "Collections"])

Set suite-level variables:
    manage_session(action="set_variables", session_id="s1",
                   variables={"BASE_URL": "https://example.com", "TIMEOUT": "30"})

Import a library with constructor arguments:
    manage_session(action="import_library", session_id="s1",
                   library_name="Browser", args=["chromium"])

Load a Python variable file:
    manage_session(action="import_variables", session_id="s1",
                   variable_file_path="config/variables.py",
                   args=["production", "secret_key"])

Start a named test (multi-test mode):
    manage_session(action="start_test", session_id="s1",
                   test_name="Login Test", test_tags=["smoke"],
                   test_setup={"keyword": "Open Browser", "arguments": ["chromium"]})

End the current test:
    manage_session(action="end_test", session_id="s1")

Set suite setup (for generated .robot file):
    manage_session(action="set_suite_setup", session_id="s1",
                   keyword="New Browser", args=["chromium"])

Set suite teardown:
    manage_session(action="set_suite_teardown", session_id="s1",
                   keyword="Close Browser")
ParametersJSON Schema
NameRequiredDescriptionDefault
argsNo
aliasNo
scopeNosuite
actionYes
keywordNo
profileNo
scenarioNo
templateNo
librariesNo
test_nameNo
test_tagsNo
variablesNo
model_nameNo
model_tierNo
session_idNo
test_setupNo
test_statusNopass
library_nameNo
test_messageNo
tool_profileNo
resource_pathNo
test_teardownNo
test_documentationNo
variable_file_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals important side effects and constraints: init after analyze_scenario causes redundant churn, end_test status is only session tracking metadata and does not affect the generated .robot file, add_data_row rows appear under [Template], and start_test/end_test are local mode only. This is strong, specific behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but appropriately structured for a multi-action tool: it opens with the key routing warning, then provides workflows, per-action parameters, return behavior, and examples. Every section is useful, and the most important usage guidance is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 24 parameters, no annotations, and zero schema descriptions, the description is unusually comprehensive: it covers workflows, all major actions, return values, failure guidance, and common usage examples. The main gap is the undocumented set_tool_profile/tool_profile-related parameters and a few schema-only fields, leaving some invocation paths unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description compensates in detail for most parameters: each action lists its relevant params, and examples clarify data shapes such as variables, test_setup, and args. However, several schema parameters—profile, tool_profile, scenario, model_name, model_tier, and the set_tool_profile action—are not documented in the description, and template is referenced but not listed under start_test params. This prevents a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the tool's scope: "Manage session lifecycle: initialize, configure libraries/variables, and organize tests." It then differentiates itself sharply from analyze_scenario, which is the session-creating front door. This makes the tool's purpose and boundaries immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: prefer analyze_scenario for new scenarios, do not call action="init" right after analyze_scenario, and use manage_session for explicit session operations on existing sessions. It also provides concrete single-test and multi-test workflows and an explicit alternative for the init action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_librariesA

Recommend libraries for a scenario or generate/merge sampling prompts.

WHEN TO USE THIS TOOL:

  • IMMEDIATELY after analyze_scenario, before execute_step

  • When you encounter "No keyword with name" errors

  • To discover which libraries provide needed functionality

This tool analyzes scenario text and suggests relevant libraries, saving you from guessing which libraries to import.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of samples to request when mode="sampling_prompt" (defaults to 4).
modeNo"direct", "sampling_prompt", or "merge_samples".direct
contextNoContext such as "web", "mobile", or "api". Defaults to "web".web
samplesNoSampled recommendations to merge when mode="merge_samples".
scenarioYesNatural-language description of the task to automate.
session_idNoOptional session id to align recommendations with an existing session.
include_keywordsNoWhen True, include a compact keyword list (names only) for the top recommendation.
apply_search_orderNoWhen True, applies recommended order to the session.
check_availabilityNoWhen True, checks installability/presence of suggested libs.
use_llm_refinementNoWhen True, uses LLM via ctx.sample() to refine recommendations.
available_librariesNoOptional pre-fetched library metadata to use instead of registry defaults.
max_recommendationsNoMaximum libraries to return (direct mode).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden, but it only describes a suggestion/analysis behavior. It does not disclose that the default apply_search_order=true can mutate session search order, that check_availability defaults to true and probes the environment, or that use_llm_refinement can invoke ctx.sample(). These are material behavioral traits for an agent deciding whether to call this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably compact and front-loaded with the core purpose, followed by scannable bullets. It is slightly repetitive because the opening sentence and the final sentence both express the recommending idea, but the structure helps an agent scan quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and high schema coverage remove the need to describe return values and parameter formats. However, for a 12-parameter, multi-mode tool with no annotations, the description omits important context such as session-mutating defaults and how the sampling/merge modes relate to the main recommendation workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level meaning beyond naming 'scenario' as the input; the schema's own parameter descriptions already carry the mode, k, samples, and flag semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object: 'Recommend libraries for a scenario or generate/merge sampling prompts.' It reinforces this with 'analyzes scenario text and suggests relevant libraries', and situates it among siblings by saying it runs after analyze_scenario and before execute_step and is used to discover which libraries provide needed functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'WHEN TO USE THIS TOOL' section gives explicit triggers: immediately after analyze_scenario, on 'No keyword with name' errors, and when discovering needed libraries. It lacks explicit when-not-to-use guidance or named alternative tools such as check_library_availability or find_keywords, so it is clear but not a full routing map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resume_batchA

Resume a failed batch from its failure point, optionally inserting fix steps.

After execute_batch returns status=FAIL with a batch_id, call this to:

  1. Re-run the failed step (with optional fix_steps injected before it)

  2. Continue executing remaining steps from the original batch

ParametersJSON Schema
NameRequiredDescriptionDefault
batch_idYesThe batch_id from a failed execute_batch response.
fix_stepsNoOptional steps to execute before retrying the failed step. Same format as execute_batch steps.
timeout_msNoOverride remaining timeout budget (uses original if omitted).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavior disclosure. It clearly explains that the tool reruns the failed step, optionally injects fix_steps before it, and continues remaining steps from the original batch. It does not discuss side effects or edge cases like repeated failures, but the core execution behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then uses a numbered list to clarify the exact order of operations. Every sentence earns its place; there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the essential precondition, the execution sequence, and the optional fix-step mechanism. Since an output schema exists, return-value details are not required, and the parameter schema covers format specifics. It could be slightly more explicit about not using this tool for non-failed batches, but the current framing is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter thoroughly. The description adds workflow context around 'fix_steps' and the failure-point relationship, but does not meaningfully expand on parameter formats or defaults beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('resume') with a clear resource ('a failed batch'), and precisely states the behavior: re-run the failed step and continue remaining steps. It clearly differentiates itself from execute_batch by describing the failure-point continuation workflow rather than initial execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a specific trigger condition: 'After execute_batch returns status=FAIL with a batch_id, call this to...' This is clear enough for an agent to know when to invoke it. It does not explicitly list exclusions or alternative tools, but the failure condition and step-by-step follow-up make the usage context unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_test_suiteB

Validate or execute a Robot Framework suite.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"dry"/"validate" for dry run; "full" to execute. Defaults to "full".full
session_idNoSession containing steps to build/execute; optional if suite_file_path is given.
output_levelNoResponse verbosity ("minimal", "standard", "detailed").standard
suite_file_pathNoPath to an existing .robot file to validate/execute.
include_warningsNoWhether to include warnings in validation output.
validation_levelNoDry-run validation depth ("minimal", "standard", "strict"). Default "standard".standard
execution_optionsNoRF execution options (variables, tags, loglevel, etc.). For ``suite_file_path`` with dry/validate mode, these are forwarded to Robot (e.g. ``variables``, ``include_tags``, ``exclude_tags``, ``test`` / ``tests``, ``pythonpath``, ``loglevel``). Subprocess cap: ``dry_run_timeout`` (preferred), ``dryrun_timeout``, or ``timeout`` (seconds); default comes from config ``DRY_RUN_TIMEOUT``.
capture_screenshotsNoEnable screenshot capture on failures (if supported).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavior on its own. It only states 'validate or execute', but doesn't mention side effects (e.g., whether execution is destructive, whether it generates reports, whether it requires a running session) or any constraints. This is insufficient for an agent to predict the tool's impact, especially given the tool's complexity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the tool's purpose. It avoids unnecessary detail and stays focused, scoring high on efficiency. There is no redundant wording or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having eight parameters, nested options, and an output schema, the one-sentence description does not explain overall workflow, mode selection, or parameter combinations (e.g., session_id vs suite_file_path). The schema covers individual parameters, but the description lacks the high-level context needed for a tool this complex, especially with sibling tools that may overlap in functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for all parameters (100% coverage), so the description does not need to repeat them. The description adds nothing about parameter usage, but the baseline is 3 given complete schema coverage. The description's lack of parameter context doesn't degrade the score, as the schema fills the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Validate or execute a Robot Framework suite.' It specifies the resource (Robot Framework suite) and the actions (validate/execute), which is enough to distinguish it from sibling tools that target individual steps or flows. The verb is specific and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool over alternatives like build_test_suite, execute_flow, or execute_step. It neither states conditions nor recommends alternatives, leaving the agent to infer usage from the tool name and schema. There is no mention of prerequisites or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_library_search_orderC

Set explicit library search order for keyword resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
librariesYesLibrary names in priority order (highest first).
session_idNoSession to apply the search order to.default

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden. It only says 'set', which implies a mutation, but does not disclose consequences such as whether the order is replaced entirely, session-specific effects, permissions required, or any side effects. For a mutation tool, this is insufficient disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the core action and purpose. There is zero waste—every word contributes meaning. It is optimally concise for its content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description lacks critical behavioral context: what an 'explicit order' means in practice, whether it replaces or merges with existing orders, and how it affects keyword resolution across sessions. Since annotations are missing, the description should fill this gap but does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters well-documented ('Library names in priority order (highest first)' and 'Session to apply the search order to'). The description adds no parameter-specific detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Set' and the resource 'library search order', with the purpose 'for keyword resolution'. It is distinct from siblings like manage_library_plugins and recommend_libraries, though it does not explicitly name them. The verb and resource are specific enough to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description only states what it does, with no mention of conditions, exclusions, or scenarios where another tool would be more appropriate. This is a significant gap given the large sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visual_checkA

Capture a screenshot of the current UI for VISUAL validation (change: visual-inspection-guidance).

Token-cheap by DEFAULT: saves the screenshot to disk and returns the PATH as text — a multimodal agent WITH file access reads that file on demand for checks the DOM/ARIA can't do (canvas/image text, layout/overlap, obscured elements, color, charts). Call get_locator_guidance(library="visual") for when to use it.

Set return_image=true ONLY if your model is multimodal AND cannot read the saved file (e.g. a hosted/remote MCP): the response then includes an image content block. This requires ROBOTMCP_SCREENSHOT_MODE to allow images (image|auto); text-only deployments (mode=file, the default) always return just the path so a text-only model is never sent unsupported image content.

Works across Browser/SeleniumLibrary/AppiumLibrary/PlatynUI (uses the session's screenshot keyword). Degrades cleanly if capture fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNo
session_idYes
return_imageNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden. It discloses default behavior (saves to disk, returns path), the effect of return_image=true (image content block), the required ROBOTMCP_SCREENSHOT_MODE, and graceful degradation on failure. This is rich and actionable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It is front-loaded with the core action and then covers options, environment, and compatibility. The structure is logical and not repetitive, though slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, this description is near-complete: it covers purpose, usage scenarios, return types, environmental requirements, supported libraries, and failure behavior. An agent would have enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It thoroughly explains return_image (default false, mode requirements) and implies filename through 'saves the screenshot to disk'. session_id is left inferred, but overall it adds significant meaning to otherwise bare parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Capture a screenshot of the current UI for VISUAL validation'. It explicitly distinguishes the tool's use case (checks DOM/ARIA can't do) from other tools. This makes it easy to differentiate from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance by listing scenarios like 'canvas/image text, layout/overlap, obscured elements, color, charts' and directs to 'Call get_locator_guidance(library="visual")' for more. It also implies not to use when DOM/ARIA checks suffice.

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.

  1. 19 tool updatesv0.35.0
    • First observedanalyze_scenario
    • First observedbuild_test_suite
    • First observedcheck_library_availability
    • First observedexecute_batch
    • First observedexecute_flow
    • First observedexecute_step
    • First observedfind_keywords
    • First observedget_keyword_info
    • First observedget_locator_guidance
    • First observedget_session_state
    • First observedintent_action
    • First observedmanage_attach
    • First observedmanage_library_plugins
    • First observedmanage_session
    • First observedrecommend_libraries
    • First observedresume_batch
    • First observedrun_test_suite
    • First observedset_library_search_order
    • First observedvisual_check

TDQS

B3.4/5.0

Scored across 19 tools

Disambiguation3/5

The set has several overlapping clusters: session creation (analyze_scenario vs manage_session init), execution (intent_action, execute_step, execute_batch, execute_flow), and keyword/library discovery (recommend_libraries, find_keywords, get_keyword_info, check_library_availability). The detailed descriptions help differentiate these tools, but the boundaries are not always obvious, and two discovery tools share the same 'No keyword with name' trigger.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern such as execute_batch, recommend_libraries, and build_test_suite. A few names deviate—intent_action is noun-oriented and visual_check is adjective+noun—but the overall convention is consistent and readable.

Tool Count3/5

19 tools is on the heavy side and includes several near-duplicate discovery and execution aids that could be consolidated. However, the server covers a broad workflow from scenario analysis through suite generation and visual validation, so the count is not unreasonable for its scope.

Completeness4/5

The workflow from scenario analysis through keyword discovery, execution, batching, suite generation, and running is well covered. Minor gaps exist, such as no explicit session teardown/reset action and some redundancy among discovery helpers, but agents can work around these.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    RobotMCP is a comprehensive Model Context Protocol (MCP) server that bridges the gap between human language and Robot Framework automation. It enables AI agents to understand test intentions, execute steps interactively, and generate complete test suites from successful executions.
    19
    2,793 PyPI
    117
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables generating Robot Framework test cases with SeleniumLibrary, creating page object models, and performing performance monitoring through natural language.
    9 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to drive Robot Framework through natural language, discovering keywords, running live test steps across web, mobile, API, database, and desktop targets, and generating clean .robot test suites from plain-English instructions.
    Apache 2.0