DAXQO Trajectory Collector MCP Server
Provides an optional Android observer integration for collecting GUI action trajectories from a device via an authorized ADB connection and compatible DAXQO Android bridge, including device checks, starting collection tasks for allowed apps, and watching device streams. The core recorder/MCP path can ingest supplied actions without requiring ADB or an Android device.
Click on "Deploy 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., "@DAXQO Trajectory Collector MCP Serverrecord this GUI action in my trajectory dataset"
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.
DAXQO Trajectory Collector
Local GUI action recording, privacy filtering, replay and dataset export for any harness.
本地 GUI Agent 轨迹采集工具,可通过 Python API、命令行或 MCP 接入不同 harness。数据处理无需运行 DAXQO 或 Motor;Android 原生观察器另有明确的 bridge 依赖。
Python 3.10+, standard-library-only runtime, MIT license.
Durable JSONL + SQLite, conflict detection, idempotent ingestion and leakage-aware exports.
Sensitive UI/input values and hidden reasoning filtered before persistence.
No model provider, cloud upload or training service included.
Install
python -m pip install "git+https://github.com/axiomzero-qed/DAXQO-Trajectory-Collector.git@v0.1.0"From a source checkout: python -m pip install .. No sibling checkout is needed. Motor is optional.
Related MCP server: wisp
Use from another harness
from pathlib import Path
from trajectory import Dataset, Recorder, snapshot
with Dataset(Path("./data")) as dataset:
writer = Recorder(dataset,
device_id="b683d45a-e298-40b3-90c2-3bcd8f59cb84",
session_id="7468c2e4-dae4-4d3b-b959-b6e671f6f951",
source="my_harness")
receipt = writer.record_action(
task_id="example-task", action_id="example-action",
action={"type": "click", "target": {"resource_id": "details"}},
before=snapshot("demo.app", [{"text": "Details"}]),
after=snapshot("demo.app", [{"text": "Demo details"}]),
status="succeeded",
started_at="2026-10-24T10:00:00Z",
finished_at="2026-10-24T10:00:01Z")This records synthetic observations and performs no device action. In production, supply observations/outcomes from the existing executor and assign your own stable device UUID. Keep the device/session/action IDs, source, timestamps and contents unchanged when retrying; conflicting retries are rejected.
Reported success remains an unverified agent claim. Independent human/fixture verification is required for positive training examples by default.
CLI and MCP
daxqo-collect --data ./data stats
daxqo-collect --data ./data import ./actions.jsonl
daxqo-collect --data ./data replay --output ./dist/replay.html
daxqo-collect --data ./data export --output ./exports/scoring --split-by task
python -m trajectory.mcp_server --data ./data --device-id b683d45a-e298-40b3-90c2-3bcd8f59cb84MCP tools: trajectory_record, trajectory_stats, trajectory_export. They record supplied actions; they never execute phone actions. See harness integration, host config and schema.
Optional Android observer
USB collection needs a compatible DAXQO Android bridge, an authorized ADB connection and the owner's existing phone-control permissions. No root is required. The core API/MCP path above needs no ADB, APK or DAXQO harness.
daxqo-collect --adb /path/to/adb --serial DEVICE_SERIAL devices
daxqo-collect --adb /path/to/adb --serial DEVICE_SERIAL --data ./data start --task "Browse the fixture" --allow-app io.daxqo.trajectoryfixture
daxqo-collect --adb /path/to/adb --serial DEVICE_SERIAL --data ./data watchCoordinate one ACK receiver and one explicit Dataset root per device stream. Replay only inspects records; it never repeats historical actions. See Android build/integration. Native observer sources are canonical in this repository.
Development
python -m pip install ".[dev]"
python -m unittest discover -s tests
python -m build
python examples/mcp_smoke.pyThe independent official MCP client smoke test uses synthetic inputs and an isolated working directory. Historical device results do not replace acceptance on a new device/harness.
Source releases exclude device data, credentials, generated reports, APKs and website sources. See dataset behavior.
Available Tools
3 toolstrajectory_exportC
Export a dataset under the operator-configured export directory.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| split_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses that the operation exports data to an operator-configured directory, but it omits overwrite behavior, permissions or auth requirements, output format, and whether the action is destructive or reversible.
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 front-loaded sentence with no wasted words. Its brevity is efficient, though it contributes to the broader under-specification of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has two parameters, no annotations, no output schema, and 0% schema description coverage. The description adds only the export-directory context and leaves parameter behavior, return values, and side effects unexplained. That is too thin for an agent to invoke the tool confidently.
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%, and the description never mentions either parameter. It does not explain what the name parameter identifies or how split_by changes the export. The agent must infer both from bare schema fields and an enum alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: export a dataset. It also adds a scope detail, the operator-configured export directory. It does not explicitly distinguish this tool from trajectory_record or trajectory_stats, so it falls short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus trajectory_record or trajectory_stats. It also omits prerequisites, alternatives, and any when-not-to-use conditions. The only contextual cue is that exports go under the operator-configured directory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trajectory_recordC
Record one externally executed action; never performs device actions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | Yes | ||
| model | No | ||
| stage | No | ||
| action | Yes | ||
| before | Yes | ||
| status | No | ||
| subgoal | No | ||
| task_id | Yes | ||
| action_id | Yes | ||
| user_task | No | ||
| confidence | No | ||
| error_code | No | ||
| started_at | Yes | ||
| finished_at | Yes | ||
| tool_call_id | No | ||
| candidate_actions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the tool never performs device actions, but it omits persistence behavior, auth requirements, idempotency/duplicate handling for action_id, and what the call returns.
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 tight two-clause sentence with the core purpose and non-execution guarantee front-loaded. It contains no fluff, though it is arguably too terse for a tool with this many parameters.
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 16 parameters, no annotations, no output schema, and 0% schema description coverage, a single-sentence description is substantially incomplete. It communicates purpose and non-execution but leaves usage context, parameter semantics, and behavioral details unaddressed.
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% across 16 parameters, including 7 required fields and nested before/after/action objects. The description mentions only 'one externally executed action' and provides no meaning for task_id, action_id, timestamps, status enum, or other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Record one externally executed action.' The clause 'never performs device actions' further distinguishes it from an execution tool. It does not explicitly differentiate from its siblings, but those siblings are unrelated stats/export tools.
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 phrase 'externally executed action' implies the tool is used after an action has already been performed elsewhere, and 'never performs device actions' clarifies what it should not be used for. However, there is no explicit when-to-use guidance, prerequisites, or comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trajectory_statsB
Read local trajectory counts and quality statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full disclosure burden. 'Read' implies a read-only operation and 'local' scopes the data source, but there is no mention of permissions, whether data is cached/refreshed, cost, or what the statistics contain.
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?
A single short sentence with the resource front-loaded and no filler. Nothing is wasted, though it is arguably too terse rather than too long.
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?
For a zero-param, read-only tool with no output schema and no annotations, the description is the only source of information about results. 'Counts and quality statistics' is left vague — no shape, units, or freshness — so the definition is adequate but leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. No parameter-level detail is needed.
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?
Specific verb 'Read' paired with a concrete resource: trajectory counts and quality statistics. This distinguishes it from siblings trajectory_record (write) and trajectory_export (export), though it doesn't explicitly name them.
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 never states when to use this versus trajectory_record or trajectory_export, nor any prerequisites. Only the word 'local' hints at scope, leaving callers to infer the routing decision themselves.
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
trajectory_export - First observed
trajectory_record - First observed
trajectory_stats
TDQS
Scored across 3 tools
Each tool has a clearly distinct action: recording, reading stats, and exporting. There is no meaningful overlap or ambiguity between them.
All tools follow the same trajectory_<action> convention with consistent snake_case and a shared domain prefix. The pattern is predictable and readable.
Three tools is well-scoped for a focused trajectory collector. Each tool earns its place and supports a core workflow stage.
The surface covers recording, observing statistics, and exporting data, which are the main lifecycle operations. Minor gaps exist around listing or inspecting individual trajectories, but agents can work around this through export.
Maintenance
Related MCP Connectors
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Public MCP digital twin with synthetic systems and an agent firewall. No customer data.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides Android UI automation tools via MCP, enabling device interaction, UI snapshot, and gesture recording.-
- AlicenseNot gradedqualityBmaintenanceProvides bounded, observable access to graphical apps, browsers, terminals, Android devices, virtual machines, and SSH hosts through MCP tools, enabling safe automation and app QA.109 npmApache 2.0
- AlicenseBqualityBmaintenanceLocal MCP server for observing and controlling an authorized Android device over USB using ADB and scrcpy, providing screen capture, UI automation, app inspection, logcat, and evidence recording.2929 npm3MIT
- FlicenseAqualityCmaintenanceEnables installing, launching, and inspecting Android APKs on a dedicated emulator, with screen capture, UI tree inspection, and touch/navigation control via MCP tools.10-