rf-log-mcp
rf-log-mcp is an MCP server for parsing and analyzing Robot Framework test result files, providing structured views and search capabilities primarily for LLM consumption.
Parse Result Files (
parse_result): Load and index a Robot Frameworkoutput.xml(RF 6.0+/7.x) oroutput.json(RF 7.2+) file into a SQLite store, returning arun_id. Supportsforce_rebuildto re-index an already-parsed file.Get Views (
get_view): Retrieve a specific view of a parsed run byrun_idor file path. Supported views:summary– high-level overview of test run statisticsfailure_path– trace/call chain of failed test stepsstep_window– windowed detail view of test stepsSupports pagination via
cursor, a tokenbudgetlimit, and an optionalselector.
Search Messages (
search_messages): Full-text search over indexed log messages within a parsed run, filterable by loglevel(e.g., ERROR, WARN), with a configurablelimitandcursorfor pagination.Resources: Exposes MCP resources at
rf://runs/{run_id}/summaryandrf://runs/{run_id}/tests/{test_id}for direct access by MCP hosts.Customizable storage: The default SQLite database path can be overridden via the
RF_LOG_MCP_DBenvironment variable.
Provides tools for parsing and analyzing Robot Framework test result files (output.xml and output.json), enabling AI agents to retrieve test summaries, failure paths, step windows, and search through test messages.
Supports parsing and analysis of Robot Framework test results in XML format (output.xml files from Robot/Rebot 6.0.x/6.1+/7.x), providing structured data access to test execution details.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rf-log-mcpparse_result tests/output.xml"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rf-log-mcp
An MCP server for inspecting Robot Framework result files, providing LLMs with concise evidence views.
Feature Overview
Supported inputs:
output.xml: Robot / Rebot 6.0.x / 6.1+ / 7.xoutput.json: Robot / Rebot 7.2+
Exposed MCP capabilities:
Tools
parse_resultget_viewsearch_messages
Resources
rf://runs/{run_id}/summaryrf://runs/{run_id}/tests/{test_id}
Supported views:
summaryfailure_pathstep_window
Related MCP server: RobotMCP
Key Notes
This project is an MCP stdio server
The correct usage is: The MCP host starts the
rf-log-mcpprocess and then calls tools and resources via stdio
Quick Start
1. Install dependencies
uv sync2. Recommended MCP configuration example
{
"mcpServers": {
"rf-log-mcp": {
"command": "uv",
"args": [
"run",
"python",
"-m",
"rf_log_mcp"
]
}
}
}Packaging and Installation
Build
uv buildGenerated after build:
dist/rf_log_mcp-0.1.0-py3-none-any.whldist/rf_log_mcp-0.1.0.tar.gz
Install wheel
uv pip install dist/rf_log_mcp-0.1.0-py3-none-any.whlAfter installation, you can start it directly:
rf-log-mcpMCP configuration example for installed package
{
"mcpServers": {
"rf-log-mcp": {
"command": "rf-log-mcp",
"args": []
}
}
}Windows explicit path example
{
"mcpServers": {
"rf-log-mcp": {
"command": "D:\\project\\rf_log_mcp\\.venv\\Scripts\\rf-log-mcp.exe",
"args": []
}
}
}Typical Call Flow
Step 1: Parse result file
parse_result(path="tests/fixtures/single_failure_611.xml")Typical return:
{
"ok": true,
"run_id": 1,
"source_format": "xml"
}Step 2: Get summary
get_view(run_id=1, view="summary")Step 3: Get failure path or search messages
get_view(run_id=1, view="failure_path")
search_messages(run_id=1, query="timeout")Environment Variables
RF_LOG_MCP_DB
Used to override the default SQLite database path.
PowerShell example:
$env:RF_LOG_MCP_DB="D:\data\rf-log-mcp\store.sqlite3"
rf-log-mcpMCP configuration example:
{
"mcpServers": {
"rf-log-mcp": {
"command": "rf-log-mcp",
"args": [],
"env": {
"RF_LOG_MCP_DB": "D:\\data\\rf-log-mcp\\store.sqlite3"
}
}
}
}FAQ
1. Why use uv?
Local environment dependencies may conflict with MCP, requiring venv to isolate dependency conflicts (conda is too slow, uv is fast)
2. Can get_view / search_messages accept file paths?
Yes.
If the file has already been parsed, the service will convert the path to the corresponding run_id before querying.
However, it is still recommended to prioritize using the integer run_id returned by parse_result().
5. Under what circumstances can this project not be used directly?
If your LLM platform:
Does not support MCP
Or does not support starting local processes
Then it cannot be integrated directly and requires an additional integration layer.
Development Checks
uv run ruff check .
uv run pytestAvailable Tools
3 toolsget_viewC
Get one supported view using a numeric run id or an already-parsed file path.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| view | Yes | ||
| selector | No | ||
| cursor | No | ||
| budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 mentions retrieving a view but lacks details on permissions, rate limits, error handling, or what 'supported view' entails. This is inadequate for a tool with 5 parameters and no annotation coverage, leaving the agent with insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no annotations) and the presence of an output schema, the description is incomplete. It doesn't address parameter meanings or behavioral traits, though the output schema may help with return values. This leaves gaps but isn't entirely inadequate, aligning with a minimum viable score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only vaguely references 'run id' and 'file path' without explaining the 5 parameters (run_id, view, selector, cursor, budget) or their relationships. This fails to add meaningful semantics beyond the bare schema, resulting in poor parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get one supported view using a numeric run id or an already-parsed file path.' It specifies the action (get), resource (view), and input types (run id or file path). However, it doesn't explicitly differentiate from sibling tools like 'parse_result' or 'search_messages', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance on when to use this tool, mentioning only the input types (run id or file path). It doesn't explain when to choose this over alternatives like 'parse_result' or 'search_messages', nor does it specify prerequisites or exclusions, leaving significant gaps in usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_resultB
Parse a Robot Framework output.xml or RF 7.2+ output.json file and index it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| force_rebuild | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 mentions parsing and indexing but doesn't explain what 'index it' entails (e.g., creating a searchable database, storing metadata), whether it's idempotent, if it requires specific permissions, or how errors are handled. For a tool with two parameters and no annotation coverage, this is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Parse a Robot Framework output.xml or RF 7.2+ output.json file and index it.' It's front-loaded with the core action and resource, with no wasted words or redundancy. Every part of the sentence contributes directly to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which reduces the need to describe return values), no annotations, and a simple input schema with low coverage, the description is minimally adequate. It states what the tool does but lacks details on behavior, parameters, and usage context. For a parsing/indexing tool, this leaves gaps in understanding how it operates and when to apply it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter semantics beyond what the input schema provides. With 0% schema description coverage, the schema only lists 'path' (string) and 'force_rebuild' (boolean, default false) without explaining their meanings. The description doesn't compensate by clarifying what 'path' refers to (e.g., file path, URL) or what 'force_rebuild' does (e.g., overwrite existing index). This meets the baseline of 3 since the schema provides some structure, but the description fails to add value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Parse a Robot Framework output.xml or RF 7.2+ output.json file and index it.' It specifies the verb (parse), the resource (Robot Framework output files), and the action (index it). However, it doesn't explicitly differentiate from sibling tools like 'get_view' or 'search_messages', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., file existence), use cases (e.g., for analysis or reporting), or exclusions (e.g., not for real-time monitoring). With sibling tools like 'get_view' and 'search_messages' available, this lack of context leaves the agent guessing about appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesC
Search indexed messages using a numeric run id or an already-parsed file path.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| query | Yes | ||
| level | No | ||
| limit | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose whether this is a read-only operation, potential side effects, authentication needs, rate limits, or what the search returns. The mention of 'indexed messages' hints at a read operation but is insufficient for a mutation-aware agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose and specifies input types clearly, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with 0% schema coverage and an output schema (which handles return values), the description is incomplete. It covers the 'run_id' parameter but misses others, and with no annotations, it lacks behavioral context. However, the output schema mitigates some gaps, making it minimally adequate but with clear deficiencies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but only partially does. It explains 'run_id' accepts numeric or file path inputs, but doesn't clarify 'query', 'level', 'limit', or 'cursor' parameters. This leaves most parameters undocumented beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and resource ('indexed messages'), and specifies the two input types ('numeric run id or an already-parsed file path'). It doesn't explicitly differentiate from sibling tools like 'get_view' or 'parse_result', but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_view' or 'parse_result'. The description mentions input types but doesn't explain context, prerequisites, or exclusions for usage.
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.
3 tool updates
v0.1.0- First observed
get_view - First observed
parse_result - First observed
search_messages
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_view retrieves a specific view, parse_result processes and indexes files, and search_messages queries indexed messages. There is no overlap in functionality, and the descriptions clearly differentiate their roles, making misselection unlikely.
All tool names follow a consistent verb_noun pattern (get_view, parse_result, search_messages) with clear, descriptive verbs and nouns. The naming is uniform throughout, using snake_case consistently without any deviations or mixed conventions.
With only 3 tools, the set feels thin for a Robot Framework log management server, as it might lack operations like updating or deleting parsed data. However, the tools cover core parsing and querying functions, making it borderline appropriate but potentially limited in scope.
The tools provide basic parsing and search capabilities, but there are notable gaps: no update or delete operations for indexed data, and no tools for managing multiple runs or views beyond retrieval. This could lead to dead ends in workflows requiring data modification or broader management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for log file analysis. Gives LLMs the ability to efficiently analyze large log files without loading them into context.7100MIT
- AlicenseAqualityAmaintenanceRobotMCP 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.19113Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server that helps resolve Robocop static code analysis errors and warnings via LLM, providing tools to get reports and run format.11MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that parses Robot Framework output.xml files, scores and groups failures, and exposes structured triage data to Claude Desktop and Claude Code.MIT