Echo
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., "@Echofind anomalies in sensor.csv, temperature column, window 24, top 3"
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.
Echo — объяснимые аномалии во временных рядах через Matrix Profile
Единственный проект в этой серии, который меняет не только масштаб, а домен и математический аппарат. Вместо дискретных символьных систем (git, файлы, политики) — непрерывные сигналы: показания датчиков, метрики серверов, биометрика, финансовые ряды.
Почему Matrix Profile, а не просто "порог + z-score"
Наивное обнаружение аномалий ("если значение выше среднего на 3σ — тревога") не объясняет почему что-то аномально и плохо работает с формой сигнала — пропускает "структурные" аномалии (например, правильные значения, но не в то время суток). Matrix Profile для каждого фрагмента сигнала находит его ближайшего двойника во всей остальной истории. Нет хорошего двойника — аномалия, и вот её конкретное объяснение: "вот с чем я тебя сравнивал, и даже это не похоже".
Related MCP server: timeseries-mcp
Демонстрация на реалистичных данных
240 часов (10 дней) почасовых показаний датчика температуры с естественным суточным циклом. В часы 120–131 датчик "застревает" на 23°C, не падая ночью, как во все остальные дни.
ANOMALIES (discords):
Subsequence at [100:124] doesn't resemble anything else in the series
(distance=4.77). ...
Subsequence at [124:148] doesn't resemble anything else (distance=2.05).
RECURRING PATTERNS (motifs):
Subsequence at [0:24] closely repeats the pattern at index 24
(distance=0.00, near-zero means an almost exact shape match).Обе найденные аномалии точно накрывают внедрённый диапазон 120–131 —
подтверждено golden-тестом. При top_k=3 отчёт всё равно возвращает
только две: нулевые distance после дедупликации — это мотивы, не аномалии,
и top_discords их не подмешивает. Мотивы находят точные суточные циклы
(окна на границах дней) — корректный фон нормальности.
Ключевая деталь алгоритма: exclusion zone
Без неё у каждого фрагмента "ближайшим соседом" тривиально оказался бы он сам или соседнее перекрывающееся окно (расстояние ~0), и весь профиль был бы бессмысленным. Exclusion zone (половина длины окна вокруг каждой точки) — это не оптимизация, а требование корректности из оригинальной статьи (Yeh et al., 2016). Проверено отдельным тестом, что при её отсутствии все "ближайшие соседи" оказались бы тривиально рядом.
Реальная находка в процессе разработки: дедупликация top-k
При первом запуске top-3 "самых аномальных" фрагментов оказались тремя
соседними окнами, покрывающими одну и ту же аномалию — технически
корректно, но бесполезно. Решение: top_discords пропускает кандидатов
ближе subsequence_length к уже выбранным и останавливается на distance≈0.
Архитектура (Clean Architecture по Мартину)
src/echo/
├── entities/
│ ├── time_series.py # z-normalize, distance, finite checks
│ ├── matrix_profile.py # алгоритм + exclusion zone
│ └── findings.py # Discord/Motif, top-k, preview
├── use_cases/
│ └── analyze_time_series.py
├── interfaces/
│ └── ports.py # SeriesLoader
├── infrastructure/
│ └── csv_series_loader.py
└── presentation/
├── composition_root.py
├── formatting.py
└── mcp_server.pyАлгоритм — brute-force O(n²m), осознанно: корректность важнее скорости для типичных объёмов (сотни–тысячи точек). MASS/FFT не реализован — задокументированное ограничение.
Установка
pip install -e ".[dev]"Подключение к Cursor / Claude Desktop
Как у остальных серверов серии (надёжнее, чем echo-mcp вне PATH):
{
"mcpServers": {
"echo": {
"command": "C:\\Python314\\python.exe",
"args": ["-m", "echo.presentation.mcp_server"]
}
}
}MCP Tools
Tool | Назначение |
| Анализ ряда напрямую |
| Числовая колонка CSV |
Вход отвергает NaN/Inf, пустой CSV, top_k < 1 и неверную длину окна.
Тесты
.\make.ps1Стена Мартина: black, ruff, mypy, pytest --cov≥90, лимиты функций. Golden stuck-sensor, hypothesis-свойства distance/exclusion zone, дедупликация top-k без фейковых аномалий, MCP-tools.
Лицензия
MIT
Available Tools
2 toolsanalyze_csvB
Same as analyze_series, but loads the values from a numeric column of a CSV file.
Args: file_path: Absolute path to the CSV file. column: Name of the numeric column to analyze. subsequence_length: Pattern window length (see analyze_series). top_k: How many top anomalies/patterns to report.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | ||
| column | Yes | ||
| file_path | Yes | ||
| subsequence_length | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add behavioral context beyond the schema name: the values are loaded from CSV, the column must be numeric, and output is anomalies/patterns. But it omits read-only/side-effect profile, file-size or performance limits, and failure modes, and defers most behavior to the sibling.
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 differentiator is front-loaded in the first clause, followed by a compact Args list for the four parameters. Efficient and well-structured, with only minor redundancy in the top_k wording.
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?
An output schema exists, so return values need not be described, and parameters are covered. However, the actual analysis semantics are offloaded entirely to the sibling tool, leaving the description only minimally adequate for a tool whose behavior an agent must otherwise infer.
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, and it largely does: all four parameters are given meaning (absolute path, numeric column name, pattern window length, number of top results). The only weak spot is subsequence_length, which is deferred to analyze_series rather than explained.
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 identifies the resource (a numeric column of a CSV file) and explicitly differentiates itself from the sibling analyze_series, but the core verb 'analyze' is only clarified indirectly through the top_k parameter ('top anomalies/patterns'). An agent cannot fully determine what the tool does without reading analyze_series, which is left as an external reference.
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?
Implicit guidance exists: 'Same as analyze_series, but loads the values from a numeric column of a CSV file' tells the agent to pick this variant when the data source is a CSV column rather than an in-memory series. However, there is no explicit when-to-use/when-not statement, no prerequisites, and no mention of error conditions such as a non-numeric column.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_seriesA
Find explainable anomalies and recurring patterns in a time series using the Matrix Profile algorithm. Each anomaly is explained by showing its nearest match elsewhere in the series (or the lack of one), not just flagged as a bare score.
Args: values: The time series as a flat list of numbers, in order. subsequence_length: The length of the pattern window to compare (e.g. 12 for a daily cycle sampled hourly). Must be at least 3 and at most half the series length. top_k: How many top anomalies/patterns to report.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | ||
| values | Yes | ||
| subsequence_length | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that anomalies are explained by their nearest match rather than returned as bare scores, and it states validation constraints (subsequence_length must be >= 3 and <= half the series length). It stops short of disclosing determinism, performance characteristics, or failure behavior on short/constant series.
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 core behavioral claim is front-loaded in the first two sentences, and the Args block is compact with no redundant restatement of the property names. Every sentence carries information.
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?
An output schema exists, so the description is not obliged to enumerate return fields, and it already sketches the shape of results (anomalies plus recurring patterns with nearest-match explanations). Parameter semantics and constraints are complete; the only real gap is guidance on choosing between this and the sibling analyze_csv.
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 coverage is 0%, so the description must carry all parameter meaning, and it does: values is defined as a flat, ordered list; subsequence_length is given an intuitive example (12 for a daily cycle sampled hourly) plus hard lower and upper bounds; top_k is defined as how many anomalies/patterns to report. This fully compensates for the empty schema descriptions.
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 uses a specific verb+resource pair ('Find explainable anomalies and recurring patterns in a time series') and even names the algorithm (Matrix Profile), which tells an agent exactly what class of analysis this performs. It does not explicitly differentiate from its sibling analyze_csv, though the 'time series' framing makes the boundary reasonably inferable.
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?
Usage is implied: you supply an ordered list of numbers and a window length to detect anomalies and recurring patterns. There is no statement of when to prefer this over analyze_csv or when this approach is inappropriate (e.g. non-numeric or unordered data), leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
analyze_csv - First observed
analyze_series
TDQS
Scored across 2 tools
The two tools are distinguishable by input source (in-memory list vs. CSV file path), so an agent can pick correctly. However, analyze_csv is explicitly documented as 'same as analyze_series' but with a file loader, meaning they are functionally the same operation with overlapping purpose and only a thin input-format boundary.
Both names follow a clean, predictable verb_noun snake_case pattern (analyze_series, analyze_csv) with a shared 'analyze_' prefix that signals the common family. No deviation or mixed convention.
With only two tools, the surface is thin — it amounts to one core algorithm exposed through two input adapters. That is borderline minimal rather than a well-rounded set, though the narrow scope keeps it from being egregious.
For time-series anomaly/pattern discovery the pair does cover list and CSV inputs, but there are notable gaps: no output for the raw Matrix Profile, no way to write/export results, and no multi-column or batch analysis. Agents can work around these but the lifecycle feels partial.
Maintenance
Related MCP Connectors
Structured analysis API and remote MCP tool for text, JSON records and numeric series.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Find novel, statistically validated patterns in tabular data — hypothesis-free.
- SchemaOAuthai.schemalabs
The AI that understands raw data: Schema over your tables and databases, as MCP tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that exposes GPU-accelerated anomaly detection to AI assistants via the Model Context Protocol. Provides two MCP tools: waveguard_scan (send training + test data in one call, returns per-sample anomaly scores and top explanatory features) and waveguard_health (check API and GPU status). Works on time series, JSON, numbers, text, and images — fully stateless.34MIT
- AlicenseAqualityDmaintenanceDeterministic time-series statistics for AI agents. This MCP server gives any LLM agent unit-tested statistical tools — anomaly detection, changepoint detection, seasonal decomposition, stationarity/trend tests, data-quality audits, baseline forecasts — with schema-validated structured output and no arbitrary code execution.17MIT
- AlicenseNot gradedqualityCmaintenanceEnables incident detection and analysis by identifying anomalies in metric time series and surfacing root-cause candidates and recommended actions. Supports both mock (synthetic) and VictoriaMetrics backends with identical MCP tool contracts for seamless development-to-production switching.MIT
- AlicenseAqualityDmaintenanceTimeseries anomaly analysis for fleet telemetry, delivered as an MCP server.1Academic Free v1.1