Skip to main content
Glama

Предварительная версия для разработчиков (v0.1-alpha). ContextPulse находится в активной разработке. API и конфигурация могут меняться между релизами. Сообщить о проблемах.

ContextPulse — это фоновый процесс для рабочего стола, который в реальном времени захватывает ваш экран, голос и активность клавиатуры и мыши, а затем передаёт их ИИ-агентам через Model Context Protocol (MCP). Один процесс, одна иконка в трее, 35 MCP-инструментов, ноль зависимости от облака.

Всё остаётся локальным. Никакого облака. Никакой телеметрии. Ваши данные никогда не покидают вашу машину.

┌─────────────────────────────────────────────────┐
│              ContextPulse Daemon                 │
│                                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │  Sight   │  │  Voice   │  │  Touch   │      │
│  │ Screen   │  │ Dictate  │  │ Keys +   │      │
│  │ OCR      │  │ Whisper  │  │ Mouse    │      │
│  │ Clipboard│  │ Vocab    │  │ Bursts   │      │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘      │
│       └──────────────┼──────────────┘            │
│                      ▼                           │
│              ┌──────────────┐                    │
│              │  EventBus    │                    │
│              │  (Spine)     │                    │
│              └──────┬───────┘                    │
│                     ▼                            │
│              ┌──────────────┐                    │
│              │ activity.db  │                    │
│              │ SQLite+FTS5  │                    │
│              └──────────────┘                    │
└────────────────────┬────────────────────────────┘
                     │ MCP (streamable-http :8420)
        ┌────────────┼────────────┐
        ▼            ▼            ▼
   Claude Code    Cursor      Any MCP
                              Client

Быстрая демонстрация

> You: "What am I looking at right now?"

Claude calls get_screenshot → get_screen_text:

  Active window: VS Code, src/auth/middleware.ts
  OCR text: "export async function validateToken(req: Request)..."
  Clipboard: "Bearer eyJhbGciOiJIUzI1NiIs..."

> Claude: "You're editing the auth middleware in VS Code.
>          I can see the validateToken function, and you have
>          a Bearer token in your clipboard. Want me to help
>          debug the token validation?"
> You hold Ctrl+Space and say: "refactor this to use the new auth provider"

ContextPulse Voice transcribes → pastes into editor
Claude calls get_recent_transcriptions → get_screen_text:

> Claude: "I can see your dictation and the current file.
>          Here's the refactored middleware using AuthProvider..."
> You: "What was I working on before lunch?"

Claude calls get_activity_summary(hours=4) → search_history("auth"):

  10:15 AM  VS Code, auth/middleware.ts (45 min)
  11:00 AM  Chrome, JWT.io (12 min)
  11:15 AM  VS Code, auth/tests/test_middleware.py (30 min)
  11:45 AM  Slack, #backend channel (15 min)

> Claude: "You spent the morning on auth middleware: writing
>          the implementation, checking JWT specs, then adding
>          tests. You were in Slack #backend right before lunch."

Related MCP server: mcp-vision

Зачем нужен ContextPulse?

ИИ-ассистенты для программирования мощны, но слепы. Они не видят ваш экран, не слышат ваши голосовые заметки и не знают, чем вы только что занимались. ContextPulse устраняет этот разрыв:

  • Локальный подход, ноль зависимости от облака. Ваш экран, голос и данные ввода никогда не покидают вашу машину. Никаких аккаунтов, подписок и сторонних серверов. Приватность архитектурой, а не политикой.

  • MCP-нативный с первого дня. ContextPulse предоставляет весь контекст в виде MCP-инструментов. Любой MCP-клиент (Claude Desktop, Cursor, Windsurf, VS Code) получает полный контекст без кастомных интеграций.

  • По-настоящему мультимодальный в одном процессе. Захват экрана, голосовой ввод, ввод с клавиатуры и мыши, а также семантическая память работают в одном лёгком процессе (<1% CPU). Никакой склейки нескольких инструментов.

  • Открытый исходный код (AGPL-3.0). Полностью проверяемый, самохостируемый и расширяемый. Никакой привязки к вендору, никакой зависимости от SaaS, никакого риска закрытия из-за поглощения.

Чем ContextPulse отличается от других

Возможность

ContextPulse

Обычно доступно?

Захват экрана + OCR

Да, в нативном разрешении

Часто

Голосовой ввод

Да, локальный Whisper

Редко как встроенная функция

Отслеживание клавиатуры + мыши

Да

Редко

Семантическая память

Да, трёхуровневая с гибридным поиском

Редко

Все модальности в одном процессе

Да, один лёгкий процесс

Нет, обычно отдельные инструменты

MCP-нативный

Да, 35 инструментов

Появляется

100% локально, ноль облака

Да, приватность архитектурой

Редко

Открытый исходный код

AGPL-3.0

Различается

Поддержка платформ

Платформа

Статус

Windows 10+

Полная поддержка

macOS 13+ (Apple Silicon и Intel)

Полная поддержка

Linux

Приветствуются вклады сообщества — базовые абстракции готовы, модули платформы требуют реализации

Установка

git clone https://github.com/ContextPulse/contextpulse
cd contextpulse
# Windows
pip install -e packages/core -e packages/screen -e packages/voice -e packages/touch -e packages/project

# macOS — the [macos] extras are REQUIRED, not optional niceties. They pull in
# pyobjc (clipboard, window, caret, session monitor), rumps (menu bar) and
# mlx-whisper (Apple Silicon transcription). Without them the install succeeds
# and then fails at runtime.
pip install -e "packages/core[macos]" -e "packages/screen[macos]" -e "packages/voice[macos]" \
            -e packages/touch -e packages/project

# Optional: persistent memory + semantic search
pip install -e packages/memory

Настройте вашего ИИ-агента и установите сопутствующие навыки:

contextpulse --setup claude-code   # configures MCP + installs skills
# or: contextpulse --setup gemini  # for Gemini CLI
# or: contextpulse --setup all     # both

Запустите ContextPulse:

contextpulse       # starts the background daemon
contextpulse-mcp   # starts the MCP server on port 8420

Всё готово. Ваш ИИ-агент теперь имеет инструменты для чтения вашего экрана, голоса, активности и памяти.

Добавьте в ~/.claude.json:

{
  "mcpServers": {
    "contextpulse": {
      "type": "http",
      "url": "http://127.0.0.1:8420/mcp"
    }
  }
}

MCP-инструменты

Sight (11 бесплатных инструментов)

Инструмент

Что делает

get_screenshot

Захват экрана (активный монитор, все мониторы или область)

get_recent

Последние кадры из кольцевого буфера (с фильтрацией по диффам)

get_screen_text

OCR текущего экрана в нативном разрешении

get_monitor_summary

Лёгкое текстовое резюме всех мониторов (низкая стоимость токенов)

get_buffer_status

Проверка работоспособности процесса + статистика буфера

get_activity_summary

Разбивка использования приложений за последние N часов

search_history

Полнотекстовый поиск по заголовкам окон + тексту OCR

get_context_at

Кадр + метаданные из N минут назад

get_clipboard_history

Последние записи буфера обмена

search_clipboard

Поиск по буферу обмена по текстовому содержимому

get_agent_stats

Какие MCP-клиенты потребляют контекст и как часто

Voice (3 бесплатных инструмента)

Инструмент

Что делает

get_recent_transcriptions

Последняя история голосового ввода (сырая + очищенная)

get_voice_stats

Количество диктовок, длительность, статистика точности

get_vocabulary

Текущие записи исправления слов

Touch (3 бесплатных инструмента)

Инструмент

Что делает

get_recent_touch_events

Серии набора, клики, прокрутки, перетаскивания

get_touch_stats

Количество нажатий, WPM, итоги кликов/прокруток

get_correction_history

Обнаруженные исправления голос-в-текст

Project (5 бесплатных инструментов)

Инструмент

Что делает

identify_project

Оценивает текст по всем проектам, возвращает лучшее совпадение

get_active_project

Определяет текущий проект по CWD или заголовку окна

list_projects

Все проиндексированные проекты с обзорами

get_project_context

Полный PROJECT_CONTEXT.md для проекта

route_to_journal

Направляет инсайт в журнал проекта

Memory (5 бесплатных + 2 Pro-инструмента)

Базовая память бесплатна навсегда. Лицензия не требуется.

Инструмент

Уровень

Что делает

memory_store

Free

Сохраняет память «ключ-значение» с опциональными тегами и TTL

memory_recall

Free

Извлекает память по точному ключу

memory_list

Free

Список записей памяти, опционально фильтрованных по тегу

memory_forget

Free

Удаляет память по ключу

memory_stats

Free

Статистика хранилища (количество записей, размеры БД, уровни)

memory_search

Pro

Гибридный/ключевой/семантический поиск по всем сохранённым записям

memory_semantic_search

Pro

Чистый векторный поиск с использованием эмбеддингов all-MiniLM-L6-v2

Память использует трёхуровневую архитектуру hot/warm/cold: кэш LRU в памяти → SQLite WAL + FTS5 → сжатый архив. Опциональный пакет pip install contextpulse-memory поставляет эти инструменты.

Pro (4 инструмента, требуется лицензия или 30-дневная пробная версия)

Инструмент

Что делает

memory_search

Гибридный/ключевой/семантический поиск по сохранённым записям

memory_semantic_search

Чистый векторный поиск с использованием эмбеддингов предложений

search_all_events

Кросс-модальный полнотекстовый поиск по экрану, голосу, буферу обмена, клавишам

get_event_timeline

Временное представление всех событий по всем модальностям

Бесплатно навсегда: 27 инструментов (Sight × 11, Voice × 3, Touch × 3, Project × 5, Memory × 5) Pro: добавляет 4 инструмента поиска: семантический поиск по памяти плюс кросс-модальные запросы событий Пробная версия: 30-дневная пробная версия Pro при первом использовании, кредитная карта не требуется

Кроме того, ContextPulse включает несколько фоновых обучающих инструментов (консолидация словаря, обнаружение исправлений), которые работают автоматически, чтобы со временем улучшать качество транскрипции.

Архитектура

ContextPulse — это монорепозиторий с модульными пакетами:

Пакет

Назначение

contextpulse-core

Процесс, EventBus (позвоночник), конфигурация, лицензирование, настройки

contextpulse-sight

Захват экрана, OCR, мониторинг буфера обмена

contextpulse-voice

Диктовка по удержанию, транскрипция Whisper, словарь

contextpulse-touch

Захват активности клавиатуры/мыши, обнаружение исправлений

contextpulse-project

Определение проекта и маршрутизация в журнал

contextpulse-memory

Постоянная память «ключ-значение» с семантическим поиском (опционально)

Все модули отправляют события в общий EventBus («позвоночник»), который записывает их в локальную базу данных SQLite с полнотекстовым поиском FTS5. MCP-серверы — это процессы только для чтения, которые запрашивают эту базу данных.

Разработка

git clone https://github.com/ContextPulse/contextpulse
cd contextpulse
uv venv
.venv\Scripts\activate
uv pip install -e "packages/core[dev]" -e packages/screen -e packages/voice -e packages/touch -e packages/project
pytest packages/ -x -q

См. CONTRIBUTING.md для получения рекомендаций.

Проверка работоспособности Canary

Скрипт canary проверяет каждый доступный MCP-инструмент и сообщает о прохождении/непрохождении. Он автоматически запускается по расписанию cron/Task Scheduler, чтобы выявлять регрессии до того, как их заметят пользователи.

# Run manually
python scripts/canary_health_check.py

# Verbose (shows each tool as it runs)
python scripts/canary_health_check.py --verbose

# JSON output (for CI or external monitoring)
python scripts/canary_health_check.py --json

Что он делает:

  • Автоматически запускает процесс ContextPulse, если он ещё не запущен

  • Вызывает все основные MCP-инструменты с минимальными допустимыми аргументами

  • Выводит понятное для человека резюме с разбивкой по серверам

  • Добавляет результаты в logs/canary_results.json (сохраняются последние 100 запусков)

  • Завершается с кодом 0, если все инструменты прошли, и 1, если какой-либо не прошёл

Планирование (Планировщик заданий Windows):

  1. Откройте Планировщик заданий → Создать простую задачу

  2. Триггер: Ежедневно, повторять каждые 4 часа

  3. Действие: Запустить программу

    • Программа: <path-to-contextpulse>\.venv\Scripts\python.exe

    • Аргументы: scripts/canary_health_check.py

    • Рабочая папка: <path-to-contextpulse>

Лицензия

ContextPulse распространяется под лицензией GNU Affero General Public License v3.0 (AGPL-3.0).

  • Вы можете свободно использовать, изменять и распространять ContextPulse

  • Если вы изменяете и разворачиваете его как сервис, вы обязаны открыть исходный код своих изменений

  • Доступно коммерческое лицензирование для встраивания в проприетарные продукты

По вопросам коммерческого лицензирования посетите contextpulse.ai.

Уведомление о патенте

Единая мультимодальная система доставки контекста ContextPulse находится в процессе патентования.


Available Tools

36 tools
aboutA

Return a summary of ContextPulse: what it captures, how to install, and where to connect.

Returns a multi-line string describing the daemon, its data sources, the local MCP endpoint, and primary documentation URLs.

USE WHEN: an agent needs to learn what ContextPulse is or where to find docs before deciding to use other ContextPulse tools. NOT FOR: fetching live screen/voice/activity data — use get_screenshot, get_screen_text, get_recent_voice, or get_activity_summary for that. ALTERNATIVES: open GITHUB_URL or SITE_URL directly for human-readable docs.

BEHAVIOR: pure read of static metadata. No side effects, no auth, no rate limits. Safe to call from any agent at any time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavior: pure read of static metadata, no side effects, no auth, no rate limits, safe to call anytime. This is comprehensive and goes beyond what annotations would typically provide.

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?

Well-structured with clear sections (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR). Every sentence adds value, no redundancy. Concise yet comprehensive.

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 zero parameters, an output schema exists, and the description fully explains what is returned: a multi-line string with daemon info, data sources, endpoint, and URLs. No gaps remain.

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?

No parameters exist (0 params, baseline 4). The description adds value by explaining the output content, but there is no parameter information to add since there are none.

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 returns a summary of ContextPulse, including what it captures, installation, and connection info. It uses specific verbs and resources, and distinguishes itself from sibling tools by explicitly stating what it is not for and listing alternatives.

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?

Explicit USE WHEN and NOT FOR sections guide the agent on when to use this tool versus alternatives. It clearly states when to use (to learn about ContextPulse) and when not to (for live data), and names alternative tools.

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

add_to_vocabularyA

Add a custom term to ContextPulse's voice vocabulary so Whisper recognizes it correctly.

Returns the stored term, normalized form, and any pronunciation hint accepted.

USE WHEN: a proper noun or technical term keeps mis-transcribing and you want to teach the recognizer. NOT FOR: bulk vocabulary loads — use the local CLI for that. ALTERNATIVES: remove_from_vocabulary to undo, get_vocabulary to inspect.

BEHAVIOR: SIDE EFFECT — writes to the vocabulary database. Persists across daemon restarts. Idempotent for identical (term, pronunciation) pairs; second add updates the entry rather than duplicating.

PARAMETERS: term: the spelling you want Whisper to produce. Required, non-empty. pronunciation: optional phonetic hint (CMU dict format or plain English approximation). Omit to let ContextPulse infer.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes
pronunciationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Discloses side effect of writing to database, persistence across restarts, and idempotency behavior for identical pairs - all beyond the absent annotations.

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?

Every sentence adds value, front-loaded with purpose and return values, structured with clear sections (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR, PARAMETERS).

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?

Covers all aspects for a simple two-parameter tool: purpose, when to use, parameters, side effects, idempotency, and return values (output schema exists but description already sufficient).

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?

With 0% schema coverage, description fully explains both parameters: term is required and non-empty, pronunciation is optional with format hints and inference fallback.

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 adds a custom term to ContextPulse's voice vocabulary so Whisper recognizes it, distinguishing it from siblings like remove_from_vocabulary and get_vocabulary.

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 tells when to use (for mis-transcribing proper nouns/technical terms), when not to use (bulk loads, use CLI), and provides alternatives (remove_from_vocabulary, get_vocabulary).

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

describe_workspaceA

Describe the current desktop workspace state: active app, open windows, monitors.

Returns a structured snapshot (active app, foreground window title, list of visible windows by monitor, time-of-day signal).

USE WHEN: you need a quick "where am I in the OS right now" without pulling pixels or OCR. NOT FOR: visual content (use get_screenshot) or text content (use get_screen_text).

BEHAVIOR: pure read. Snapshot is captured at call time; very low cost.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description fully informs: 'pure read', 'snapshot captured at call time', 'very low cost'. Some detail on potential workspace changes could be added, but current info is strong.

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?

Three clear sections (purpose, usage, behavior). Every sentence serves a purpose. Extremely concise yet informative.

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?

Fully captures the tool's purpose, usage conditions, and behavior. With no parameters and an output schema, the description is complete for an AI agent to decide when to invoke.

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?

No parameters exist, so baseline is 4. The description does not add parameter info, but it describes the return value (structured snapshot), which adds value beyond the empty input 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 uses a specific verb 'describe' and clearly identifies the resource 'current desktop workspace state: active app, open windows, monitors'. It distinguishes itself from siblings like get_screenshot (visual content) and get_screen_text (text content).

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 provides a 'USE WHEN' section (quick 'where am I') and a 'NOT FOR' section that names alternatives (get_screenshot, get_screen_text). This gives clear context and exclusions.

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

get_active_projectA

Detect the user's current project from working directory, active window, and recent activity.

Returns project ID, detection method (cwd / window-title / activity-blend), and confidence.

USE WHEN: starting a session and you need to load the right project's context, or when the user says "where am I" / "what am I working on." NOT FOR: classifying arbitrary text — use identify_project.

BEHAVIOR: pure read; combines multiple signals. Returns "unknown" if nothing matches above the confidence floor.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Discloses pure read behavior, signal combination, and fallback to 'unknown' when confidence is low. With no annotations, the description fully covers behavioral expectations.

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?

Concise, well-structured description with purposeful sections (what, returns, when to use, when not, behavior). Every sentence contributes value without redundancy.

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 zero parameters and presence of output schema, the description fully covers all necessary context: detection methods, confidence, and unknown case. No gaps remain.

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?

No parameters exist, and schema coverage is 100% trivially. Baseline score of 4 applies as description adds no parameter details but none are needed.

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 detects the user's current project from working directory, active window, and recent activity, specifying the return values (project ID, detection method, confidence) and distinguishing it from the sibling 'identify_project'.

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 states when to use ('starting a session', user asking 'where am I') and when not to use ('classifying arbitrary text' with sibling alternative 'identify_project'), providing clear context for agent decision.

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

get_activity_summaryA

Summarize the user's activity (apps, focus time, OCR keyword hits) over the last N hours.

Returns a structured summary: per-app time-on-task, top OCR keywords, focus sessions detected, and idle gaps.

USE WHEN: the user asks "what have I been doing" / "where did the day go" / "summarize my last hour." NOT FOR: per-event detail (use get_recent_touch_events) or app-only breakdown (use get_app_usage).

BEHAVIOR: aggregates from buffer + activity log. No side effects. Result accuracy depends on buffer coverage; check get_buffer_status if results look sparse.

PARAMETERS: hours: lookback window. Range 1-24. Default 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Despite no annotations, the description covers behavior: aggregates from buffer + activity log, no side effects, and accuracy depends on buffer coverage with a suggestion to check get_buffer_status. This provides sufficient 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 well-structured with a concise summary followed by clearly labeled sections (USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS). Every sentence adds value with no redundancy.

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 the tool has 1 parameter and an output schema, the description explains the return type (structured summary with per-app time, keywords, focus sessions, idle gaps) and dependencies (buffer coverage). It provides everything needed for correct invocation.

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?

The single parameter 'hours' is fully described: lookback window, range 1-24, default 1. Since schema coverage is 0%, the description compensates by adding semantic meaning beyond the schema's type and default.

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 summarizes user activity over N hours, with specific verb 'summarize' and resource 'activity'. It explicitly distinguishes from sibling tools get_app_usage and get_recent_touch_events, providing purpose differentiation.

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 includes a 'USE WHEN' block with concrete user queries like 'what have I been doing' and a 'NOT FOR' block with alternatives, giving explicit guidance on appropriate usage.

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

get_app_usageA

Return per-application time-on-task over the last N hours.

Returns a list of (app_name, foreground_seconds, focus_sessions) entries, sorted by foreground time descending.

USE WHEN: you want a clean app-level breakdown without OCR/keyword data. NOT FOR: full activity summary including content — use get_activity_summary.

BEHAVIOR: pure read from foreground-window log. No side effects. Granularity is per-second.

PARAMETERS: hours: lookback window. Range 1-24. Default 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Describes as 'pure read from foreground-window log. No side effects.' and specifies granularity (per-second). No annotations exist, so this is sufficient, though could mention data retention or access constraints.

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?

Extremely concise: three short sections with no fluff. Each sentence serves a purpose (overview, use case, behavior, parameter). Perfectly front-loaded.

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 the tool's simplicity (1 param, output schema exists), the description covers purpose, usage, behavior, and parameter completely. No gaps remain.

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 parameter 'hours' is described with range (1-24) and default (1), adding value beyond the schema. Schema coverage is 0%, so description compensates well, though could clarify unit (hour).

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 'Return per-application time-on-task over the last N hours' with verb, resource, and scope. It also distinguishes from sibling tools like get_activity_summary, making it unambiguous.

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?

Explicit 'USE WHEN' and 'NOT FOR' sections provide clear context and name an alternative tool (get_activity_summary), guiding the agent on appropriate usage.

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

get_buffer_statusA

Report the rolling capture buffer's size, age range, retention policy, and disk usage.

Returns counts (entries, hours of coverage), bytes on disk, and the configured retention window.

USE WHEN: troubleshooting why search_history returns no results, or before requesting historical context that may have aged out. NOT FOR: contents of the buffer — use get_recent or search_history for that.

BEHAVIOR: pure read of buffer metadata. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Explicitly states 'BEHAVIOR: pure read of buffer metadata. No side effects.' With no annotations provided, this fully discloses the read-only nature and lack of side effects.

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?

Exceptionally concise yet comprehensive. Front-loaded with the main purpose, followed by structured sections for return values, usage guidelines, and behavior. No 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?

Given zero parameters and an existing output schema, the description fully covers purpose, usage, behavior, and return values. Provides complete context for the agent to select and invoke 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?

No parameters exist in the schema, so baseline is 4. The description does not need to add parameter semantics but confirms the tool takes no arguments.

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 verb 'Report' and the resource 'rolling capture buffer's size, age range, retention policy, and disk usage'. It distinguishes itself from sibling tools like get_recent and search_history by indicating they are for contents.

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 'USE WHEN' for troubleshooting and before requesting historical context, and 'NOT FOR' for contents of the buffer with specific alternative tool names.

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

get_clipboard_historyA

Return the most recent N clipboard entries captured by ContextPulse.

Returns entries with timestamp, content (or content-type if non-text), and source application.

USE WHEN: the user references "what I just copied" or wants to recall something they copied earlier in the session. NOT FOR: text search — use search_clipboard.

BEHAVIOR: pure read. Sensitive content (passwords from password managers, OAuth tokens detected by pattern) is auto-excluded from the buffer; those will not appear here.

PARAMETERS: n: how many entries to return, newest-first. Range 1-100. Default 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Discloses pure read behavior and auto-exclusion of sensitive content (passwords, OAuth tokens), compensating for absent annotations.

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?

Succinctly structured with sections for usage, behavior, and parameters; no unnecessary 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?

Completely covers all necessary information for a simple single-parameter tool with an output schema; describes output contents adequately.

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?

Description adds full context for parameter 'n': range 1-100, default 10, newest-first order. Input schema only provides default, so description adds significant value.

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 returns recent clipboard entries, specifies returned fields (timestamp, content/content-type, source app), and distinguishes from sibling tool search_clipboard.

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 states when to use (user references copying) and when not (text search), including the alternative tool name (search_clipboard).

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

get_context_atA

Return screen + activity context from a specific point in the recent past.

Returns the captured screen state, OCR text, active window, and clipboard snapshot from the buffer entry closest to the requested timestamp.

USE WHEN: the user references something from earlier ("the error I saw 10 minutes ago", "what was on screen when I started this session") and you need to recall that exact state. NOT FOR: live state (use get_screenshot) or text-search across history (use search_history). ALTERNATIVES: get_recent for a chronological list.

BEHAVIOR: pure read. Returns the closest buffer entry within +/- 30 seconds of the requested point; raises if no entry exists.

PARAMETERS: minutes_ago: how many minutes back to look. Range 0-1440 (24h). Required.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutes_agoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, description fully discloses behavior: 'pure read', returns closest buffer entry within +/-30 seconds, raises if no entry exists. This covers safety and error conditions adequately.

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 labeled sections (USE WHEN, NOT FOR, etc.) and no redundant sentences. Slightly verbose but each sentence adds value. Could be tightened slightly without losing clarity.

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 one parameter, no annotations, and an output schema (implied), description covers all essential: return content (screen state, OCR, active window, clipboard), timing constraint, error case. Sufficient for agent to invoke correctly.

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?

Single parameter minutes_ago with schema coverage 0% is fully described: 'how many minutes back to look. Range 0-1440 (24h). Required.' Adds meaning beyond schema type and required status.

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?

Description clearly states 'Return screen + activity context from a specific point in the recent past' with specific verb and resource. Distinguishes from siblings like get_recent and search_history by emphasizing temporal point retrieval versus chronological list or text-search.

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 provides 'USE WHEN' scenarios (user references something from earlier), 'NOT FOR' cases (live state, text-search), and 'ALTERNATIVES' (get_recent, search_history) with clear conditions.

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

get_correction_historyA

Return recent voice transcription corrections detected by the user or auto-detected.

Returns correction events: original transcript, corrected text, confidence delta, timestamp, and whether the correction was manual or auto-suggested.

USE WHEN: training the vocabulary, analyzing systemic Whisper errors, or debugging why a specific term keeps mis-transcribing. NOT FOR: vocabulary management — use add_to_vocabulary / remove_from_vocabulary.

BEHAVIOR: pure read. No side effects.

PARAMETERS: limit: max results, ordered newest-first. Range 1-100. Default 20.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

States 'BEHAVIOR: pure read. No side effects.' and lists return fields (original transcript, corrected text, confidence delta, timestamp, manual/auto). No annotations provided, so description fully covers behavioral traits.

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?

Concise, well-structured with clear sections: purpose, return fields, usage guidelines, behavior, parameter details. No 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?

Complete for a one-parameter tool with an output schema. Covers purpose, usage, behavior, parameter, and return data. No gaps.

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?

Input schema has 0% coverage but description adds 'limit: max results, ordered newest-first. Range 1-100. Default 20.' Provides range, ordering, and default value beyond 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?

Clearly states 'Return recent voice transcription corrections' with specific verb and resource. Distinguishes from siblings by specifying use cases and not for vocabulary management.

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 provides 'USE WHEN' (training vocabulary, analyzing errors, debugging) and 'NOT FOR' with alternatives (add_to_vocabulary / remove_from_vocabulary).

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

get_monitor_summaryA

List the user's connected displays with resolution, scaling, and which is active.

Returns one entry per monitor with index, resolution, scale factor, and a flag marking the monitor that currently contains the cursor.

USE WHEN: about to call get_screenshot and need to know which monitor index to target, or when debugging multi-monitor setups. NOT FOR: capturing pixels — this returns metadata only. ALTERNATIVES: get_screenshot(monitor_index=...) to actually capture.

BEHAVIOR: pure read; no side effects. Result reflects monitor state at call time and may change if the user plugs/unplugs displays.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Declares 'pure read; no side effects' and notes the result is dynamic (may change if displays change). This compensates for the lack of annotations.

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?

Concise and well-structured with clear sections for usage, alternatives, and behavior. Every sentence adds value without redundancy.

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 zero parameters and existence of an output schema, the description fully covers purpose, usage, behavior, and return fields. No gaps.

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?

Tool has no parameters; input schema is empty with 100% coverage. Baseline is 4 per guidelines. Description does not need to add param info but indirectly adds value by explaining output.

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 lists connected displays with specific metadata (resolution, scaling, active monitor). It distinguishes itself from sibling tools like get_screenshot by focusing on metadata vs. capture.

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 'USE WHEN' scenarios (e.g., before get_screenshot to target a monitor) and 'NOT FOR' (capturing pixels), plus names get_screenshot as alternative.

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

get_project_contextA

Return the full PROJECT_CONTEXT.md for a specific project.

Returns the markdown content as a string, including front-matter if present.

USE WHEN: you need the canonical project description, decisions, and architecture before answering a project-specific question. NOT FOR: live activity — use get_activity_summary for that.

BEHAVIOR: pure read. Returns empty string if the project has no PROJECT_CONTEXT.md.

PARAMETERS: project_id: project slug as returned by list_projects or get_active_project. Required.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Describes behavior as 'pure read' and explains return value (markdown string, empty string if no context). Without annotations, this is clear but could be more detailed (e.g., no side effects, idempotent).

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?

Very concise with structured sections (USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS). No wasted words, front-loaded with main purpose.

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 output schema exists, description covers usage, return value, parameter guidance, and exclusion. No gaps for this simple read tool.

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?

Adds meaning beyond schema by specifying parameter format: 'project slug as returned by list_projects or get_active_project.' Schema coverage is 0%, so this is crucial and well done.

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?

Description clearly states it returns the full PROJECT_CONTEXT.md content for a specific project, using verb 'returns' and specifying the resource and scope. Distinguishes from sibling get_activity_summary.

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 provides 'USE WHEN' and 'NOT FOR' conditions, recommending an alternative tool (get_activity_summary) for live activity.

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

get_recentA

Return the most recent N screenshots from the rolling capture buffer.

Returns a list of capture entries (timestamp, monitor index, thumbnail reference, OCR snippet) ordered newest-first.

USE WHEN: you need to see what the user was looking at over the last few minutes/hours without triggering a fresh capture. NOT FOR: live state — use get_screenshot for "right now." ALTERNATIVES: get_context_at (specific point in time), search_history (query by OCR text).

BEHAVIOR: pure read from the local buffer. Buffer size and retention are governed by daemon config; defaults to ~last 24h. No side effects.

PARAMETERS: n: how many recent captures to return. Range 1-100. Default 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Despite no annotations, description fully discloses behavior: pure read from local buffer, no side effects, and defaults for retention (~24h). Equips agent with safety and impact understanding.

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?

Well-structured with clear sections (purpose, return, usage, behavior, parameters). Every sentence is informative and no redundancy.

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 the tool's simplicity and existence of output schema, the description covers all necessary aspects: what it returns, when to use, how to configure, and behavior. No critical gaps.

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?

Input schema has no descriptions (coverage 0%), but the description adds range (1-100) and default (10) for parameter 'n', fully compensating for schema 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?

Description clearly states the tool returns the most recent N screenshots from the rolling capture buffer, with a specific verb and resource. It distinguishes from siblings by naming alternatives like get_screenshot and search_history.

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 USE WHEN, NOT FOR, and ALTERNATIVES sections. Clearly guides the agent on when to use (past buffer) vs not (live state), and points to specific sibling tools.

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

get_recent_touch_eventsA

Return the most recent N keyboard and mouse activity events.

Returns events with timestamp, type (key/click/scroll), aggregate counts (not individual keystrokes — content is not logged), and active app.

USE WHEN: analyzing input patterns, idle detection, or activity timing. NOT FOR: keylogging — actual keystroke contents are NEVER stored, only aggregate event metadata.

BEHAVIOR: pure read. Privacy guarantee: no key contents, no clipboard targets, no scroll positions inside sensitive apps.

PARAMETERS: n: number of events. Range 1-500. Default 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

No annotations provided, but description fully discloses behavior: pure read operation, privacy guarantee (no key contents, no clipboard targets, no scroll positions inside sensitive apps). Adds significant context beyond the schema.

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?

Well-structured with clear sections: function, return format, usage guidance, behavior, parameters. Every sentence adds value, no redundancy. Efficient and front-loaded.

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 the simple single-parameter tool and presence of output schema, the description is complete. It explains the return data sufficiently and addresses privacy concerns, leaving no gaps for the agent.

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?

Parameter 'n' has no schema description (0% coverage), but the description adds meaning: 'number of events. Range 1-500. Default 50.' This compensates fully, providing constraints and defaults not in 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?

Clearly states the tool returns the most recent N keyboard and mouse activity events, with specific details on the returned data (timestamp, type, aggregate counts, active app). Distinguishes from siblings like get_touch_stats and get_activity_summary by focusing on event-level data.

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 states when to use (analyzing input patterns, idle detection, activity timing) and when not to use (keylogging). Provides a clear privacy guarantee, helping the agent avoid misuse.

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

get_recent_voiceA

Return the most recent N voice transcription segments captured by ContextPulse.

Returns segments with timestamp, transcript text, confidence score, and duration.

USE WHEN: the user references something they just dictated ("what did I just say", "use my last voice note"). NOT FOR: text search over older voice — use search_voice. ALTERNATIVES: search_voice (text query), find_related_context (cross-source).

BEHAVIOR: pure read from the voice transcript log. No side effects.

PARAMETERS: n: how many segments to return. Range 1-100. Default 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and explicitly states 'BEHAVIOR: pure read from the voice transcript log. No side effects.' This discloses the key behavioral trait clearly and accurately.

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 highly concise with no wasted words, and organized into clear sections (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR, PARAMETERS). Every sentence adds value.

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 the tool's simplicity, the description covers all necessary aspects: purpose, usage context, behavior, parameter details, and return fields (timestamp, transcript, confidence, duration). It is complete and well-rounded.

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 description coverage is 0%, so description must compensate. It explains parameter n as 'how many segments to return. Range 1-100. Default 10.', adding meaning beyond the schema's type and default.

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 returns the most recent N voice transcription segments, specifying the resource (voice transcription segments) and scope (most recent N). It distinguishes from siblings like search_voice and find_related_context by explicitly naming them as alternatives.

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 provides explicit USE WHEN and NOT FOR conditions, and lists alternatives (search_voice, find_related_context). This gives clear guidance on when to invoke this tool vs others.

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

get_screenshotA

Capture a screenshot of the active monitor (or a specified monitor) at native resolution.

Returns a base64-encoded PNG plus capture metadata (timestamp, monitor index, resolution).

USE WHEN: you need pixel-level visual context (UI debugging, screenshot of a diagram, evidence of on-screen state). NOT FOR: text extraction — use get_screen_text, which is ~5x cheaper in tokens and runs OCR locally before returning. ALTERNATIVES: get_screen_text (OCR only), get_recent (rolling buffer of past captures), get_context_at (point-in-time recall).

BEHAVIOR: synchronous capture; takes 50-200 ms. Image is also written to the rolling buffer (visible via get_recent). No auth or rate limits — local only.

PARAMETERS: monitor_index: 0-based monitor index from get_monitor_summary. Omit (or pass None) to capture the monitor that currently contains the cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
monitor_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral traits: synchronous capture, timing (50-200 ms), side effect (written to rolling buffer), and access constraints (no auth/rate limits, local only).

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?

Well-structured with clear section headers (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR, PARAMETERS). Every sentence adds value, no redundancy, and front-loaded with key action.

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?

For a simple tool with one parameter and an output schema, the description covers all relevant aspects: purpose, usage, behavior, parameter, and return type (base64 PNG + metadata). No gaps.

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 0%, but description adds rich semantics: explains monitor_index as 0-based from get_monitor_summary, notes default behavior (capture cursor's monitor), and guides on usage (omit or pass None).

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?

Description clearly states the verb 'Capture a screenshot' and specific resource 'active monitor' with details on resolution and output format. It distinguishes from sibling tools like get_screen_text by noting different use cases.

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 lists when to use (pixel-level visual context) and when not (text extraction), names alternatives (get_screen_text, get_recent, get_context_at), and provides cost/benefit reasoning ('~5x cheaper in tokens').

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

get_screen_textA

Run OCR over the current screen and return extracted text only.

Returns extracted text grouped by detected region (window/panel) with approximate bounding boxes.

USE WHEN: you need the textual content visible on screen (code, terminal, chat, docs) and visual layout doesn't matter. NOT FOR: visual content (diagrams, photos) — use get_screenshot. ALTERNATIVES: get_screenshot (raw pixels), search_history (OCR over past captures).

BEHAVIOR: captures + OCR in one call; takes 200-800 ms depending on screen size. Cheaper in tokens than get_screenshot (~200-700 vs ~1200). Result is also indexed into the OCR history (visible via search_history).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Describes behavior in detail: captures+OCR in one call, timing (200-800 ms), token efficiency, and indexing into OCR history. No annotations exist, so description fully covers behavioral aspects.

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?

Well-organized with sections (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR), front-loaded, and every sentence adds value. No 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?

Given no parameters and an output schema exists, the description is complete: it explains purpose, usage context, behavior, and alternatives. No gaps.

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?

No parameters in schema (100% coverage). With zero params, description need not add param info. The description adds context about what the tool does without relying on schema details.

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?

Description clearly states the tool runs OCR on the current screen and returns extracted text grouped by region. It distinguishes itself from sibling tools like get_screenshot and search_history by specifying its purpose.

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 provides USE WHEN and NOT FOR conditions, and lists alternatives (get_screenshot, search_history), giving clear guidance on when to use this tool.

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

get_session_summaryA

Summarize the current ContextPulse session (since daemon start) — apps, captures, voice.

Returns aggregate counts (screenshots taken, voice segments transcribed, clipboard events, keystrokes) plus the session start timestamp.

USE WHEN: at the end of a work session and you want a single-call rollup without specifying a window. NOT FOR: arbitrary windows — use get_activity_summary(hours=N).

BEHAVIOR: pure read. Session boundary is set by the most recent daemon start; restarting ContextPulse resets the counter.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Declares 'pure read' behavior and explains session boundary defined by daemon start, reset on restart. No annotations provided, but description fully covers behavioral traits.

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?

Two sections with three sentences plus two usage lines. Front-loaded with purpose, every sentence adds value. No 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?

With 0 params, no annotations, and output schema present, description explains return values (aggregate counts, timestamp) and session boundary. Fully adequate for the tool's simplicity.

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?

No parameters required; input schema is empty with 100% coverage. Baseline 4 applies as description adds purpose context beyond schema, but no parameter details needed.

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?

Description explicitly states verb 'Summarize' and resource 'current ContextPulse session', listing apps, captures, voice. It distinguishes from sibling get_activity_summary by noting it's a single-call rollup for the entire session.

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?

Contains explicit 'USE WHEN' and 'NOT FOR' sections, specifying ideal use at session end and directing to get_activity_summary for arbitrary windows. Provides clear context for tool selection.

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

get_touch_statsA

Return aggregate keyboard and mouse activity stats over the last N hours.

Returns counts: keystrokes (count only — no contents), mouse clicks, scrolls, idle gaps, active-typing minutes.

USE WHEN: producing activity reports, idle detection, or fatigue tracking.

BEHAVIOR: pure read. Privacy guarantee as in get_recent_touch_events.

PARAMETERS: hours: lookback window. Range 1-24. Default 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

The description states it is a 'pure read' and provides a privacy guarantee, which is sufficient for a non-destructive tool. It does not cover authentication or rate limits, but that is acceptable given the tool's simplicity.

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 with clear sections (main description, returns, USE WHEN, BEHAVIOR, PARAMETERS). Every sentence adds value without repetition.

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 the tool's low complexity, the description covers the return values, parameter details, and behavioral aspects. The presence of an output schema further reduces the need to detail return format.

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?

The only parameter 'hours' is explained with its meaning ('lookback window'), range (1-24), and default (1), adding significant value beyond the bare schema (which had no description).

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 that the tool returns aggregate keyboard and mouse activity stats over a period, listing specific metrics. While it references a sibling tool for privacy, it does not explicitly distinguish when to use this tool versus get_recent_touch_events.

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 'USE WHEN' section explicitly lists use cases (activity reports, idle detection, fatigue tracking). However, it does not mention when not to use the tool or suggest alternatives.

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

get_vocabularyA

List every term in the user's voice vocabulary with pronunciations and add-date.

Returns one entry per term: spelling, pronunciation hint, source (manual / auto-learned), date added.

USE WHEN: auditing what's been taught, or before adding a term to check for duplicates. NOT FOR: searching transcript history — use search_voice.

BEHAVIOR: pure read of the vocabulary database. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. States 'pure read of the vocabulary database. No side effects.' which clearly discloses behavioral traits. Also describes return format (one entry per term with fields).

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?

Extremely concise: first sentence states purpose, second details return, third provides usage guidelines, fourth states behavior. No wasted words. Well-structured with clear sections.

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 zero parameters, no annotations, and presence of an output schema (though not visible), the description fully covers what the agent needs: purpose, return format, usage conditions, and behavior. Complete for a simple list tool.

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?

Tool has zero parameters, so baseline score is 4 per guidelines. Description does not need to add parameter info, but it does describe the return fields, which adds value.

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?

Clearly states it lists every term in the user's voice vocabulary with specific details (pronunciations, add-date). Distinguishes itself from siblings like add_to_vocabulary and remove_from_vocabulary by being the read-only counterpart. Additionally, explicitly says 'NOT FOR: searching transcript history — use search_voice.'

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 USE WHEN scenarios ('auditing what's been taught, or before adding a term to check for duplicates') and a clear NOT FOR case with an alternative tool reference ('use search_voice'). This gives strong guidance on when to invoke.

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

get_voice_statsA

Return dictation quality stats (WPM, confidence average, correction rate) over a window.

Returns aggregate metrics: words-per-minute, average Whisper confidence, correction rate (per get_correction_history), session count.

USE WHEN: the user asks "how is my dictation going" or you're analyzing voice quality trends. NOT FOR: per-segment data — use get_recent_voice or search_voice.

BEHAVIOR: pure read. Returns zero-valued metrics if no voice activity in the window.

PARAMETERS: hours: lookback window. Range 1-720 (30d). Default 24.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Without annotations, description fully covers behavioral traits: pure read operation, returns zero-valued metrics if no activity, and no side effects.

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?

Structured with clear sections, bullet points, and front-loaded summary; every sentence adds value.

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 output schema exists, description covers return metrics, behavior, and usage completely for a stats tool.

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?

Adds significant meaning beyond schema: specifies lookback window, range (1-720), and default (24) for the 'hours' parameter.

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?

Clearly states it returns dictation quality stats (WPM, confidence average, correction rate) over a window, and distinguishes itself from siblings like get_recent_voice and search_voice.

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 'USE WHEN' and 'NOT FOR' conditions, naming alternative tools for per-segment data.

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

identify_projectA

Score a text snippet against the indexed project corpus and return the best-match project.

Returns the top project ID, a confidence score (0.0-1.0), and the next two runners-up.

USE WHEN: the user pastes a question or note and you need to route it to the right project's context before answering. NOT FOR: detecting the user's CURRENT project — use get_active_project, which factors in CWD and window title.

BEHAVIOR: pure read; runs TF-IDF + project-keyword scoring. No side effects.

PARAMETERS: text: snippet to classify. Required, non-empty. Longer text scores more reliably; aim for 50+ characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

No annotations provided, but description fully covers behavior: declares 'pure read', describes algorithm (TF-IDF + project-keyword scoring), and states no side effects.

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?

Well structured with separate sections for output, usage conditions, behavior, and parameters. No extraneous text; every sentence adds value.

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 output schema exists, description still covers return values. Parameter guidance and behavioral context are fully addressed. Complex classification use case is well specified.

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 has 0% description coverage, but description compensates fully: states parameter is required, non-empty, and gives length recommendation (50+ characters for reliability). Adds substantial value.

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?

Clearly states it scores text against project corpus and returns best-match project with top ID, confidence, and runners-up. Explicitly differentiates from sibling get_active_project by stating NOT FOR detecting current project.

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 USE WHEN (routing user's text to right project context) and NOT FOR (detecting current project) with named alternative (get_active_project). Gives clear decision logic.

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

list_projectsA

List every project indexed by ContextPulse with name, slug, and a one-line overview.

Returns one entry per project: id, display name, root path, brief summary, last-touched timestamp.

USE WHEN: showing the user a project picker, or before calling get_project_context for a specific project. NOT FOR: full content — use get_project_context for that.

BEHAVIOR: pure read of the project registry. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, but description explicitly states 'pure read of the project registry. No side effects.' This fully discloses the read-only, non-destructive nature.

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?

Concise and well-structured with separate sections for purpose, return fields, usage, and behavior. Every sentence adds value with no waste.

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 zero parameters and an output schema, the description fully explains purpose, return fields, usage context, and behavioral characteristics. It is complete for its complexity.

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?

Input schema has zero parameters, so description adds no parameter information. Baseline for 0 params is 4, and the description appropriately avoids unnecessary param details.

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?

Clearly states it lists every project with specified fields (name, slug, overview). Distinguishes from sibling get_project_context by noting it does not provide full content.

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 provides USE WHEN (project picker, before get_project_context) and NOT FOR (full content, use get_project_context). Directs to a specific sibling tool.

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

memory_forgetA

Delete a memory entry by exact key.

Returns confirmation with the deleted key and whether it existed before deletion.

USE WHEN: a stored value is wrong or no longer needed. NOT FOR: clearing all memory — there is no clear-all tool by design; loop over memory_list and call memory_forget for each key.

BEHAVIOR: SIDE EFFECT — DESTRUCTIVE. Removes the row from the memory database; not recoverable except by re-storing. Idempotent (no-op if key doesn't exist).

PARAMETERS: key: exact key as passed to memory_store. Case-sensitive. Required.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Discloses destructive side effect, irrecoverability, and idempotence. With no annotations, the description fully covers behavioral traits needed for safe invocation.

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?

Well-organized into sections with clear headings (USAGE, BEHAVIOR, PARAMETERS). Every sentence adds value; no 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?

Covers purpose, usage, behavior, parameter semantics, and return values (confirmation of deleted key and existence check). For a single-param tool, this is fully complete.

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?

For the single parameter 'key', the description adds context: 'exact key as passed to memory_store', 'Case-sensitive', and 'Required'. With 0% schema description coverage, this fully compensates.

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 starts with 'Delete a memory entry by exact key', which clearly specifies the action and target. This distinguishes it from sibling tools like memory_store (store) or memory_list (list).

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 states 'USE WHEN: a stored value is wrong or no longer needed' and 'NOT FOR: clearing all memory', with guidance to loop over memory_list. Provides clear when-to-use and when-not-to-use.

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

memory_listA

List stored memory keys, optionally filtered by tag.

Returns (key, tag, byte_size, last_updated) entries sorted by last_updated descending.

USE WHEN: auditing what's stored, or before bulk-deleting by tag. NOT FOR: retrieving values — use memory_recall (exact) or memory_search (fuzzy). This returns metadata only.

BEHAVIOR: pure read. Sub-millisecond.

PARAMETERS: tag: filter to entries with this exact tag. Omit to list all entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Declares 'pure read. Sub-millisecond.' which describes behavioral traits. Since no annotations provided, description carries full burden and does so effectively, indicating no side effects.

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?

Structured with sections: main purpose, return format, usage guidance, behavior, and parameters. Each sentence is concise and informative. No redundancy.

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 one parameter and existence of output schema, description still provides return format details (key, tag, byte_size, last_updated) and sorting. Covers all necessary context for an agent to use the tool correctly.

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?

Explains the single parameter 'tag' with clear semantics: filter by exact tag, omit to list all. Adds meaning beyond the schema which only provides type and nullability.

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?

Clearly states verb 'List' and resource 'stored memory keys'. Distinguishes from siblings by specifying that memory_recall and memory_search are for retrieving values, not this tool. Also notes it returns metadata only.

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?

Explicit 'USE WHEN' and 'NOT FOR' sections with named alternative tools. Provides clear guidance on auditing and bulk-deletion scenarios, and what not to use it for.

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

memory_recallA

Recall the value stored at an exact key from the local memory database.

Returns the stored value as a string, or a "not found" indicator if the key doesn't exist.

USE WHEN: you stored something via memory_store and need to retrieve it by its exact key. NOT FOR: fuzzy or substring lookup — use memory_search. For semantic similarity, use memory_semantic_search.

BEHAVIOR: pure read. Sub-millisecond. Does NOT update any access timestamp — repeated recall is invisible.

PARAMETERS: key: exact key as passed to memory_store. Case-sensitive. Required.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Discloses 'pure read' and 'sub-millisecond' performance, notes no timestamp update, and explains the return value behavior (string or 'not found' indicator). No annotations exist, so description fully covers behavioral traits.

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?

Structured into clear sections (main, USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS) with no extraneous text. Every sentence serves a distinct purpose, front-loaded with core action.

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?

For a simple key-based recall tool, the description covers purpose, usage, behavior, parameters, and return behavior. With no output schema details needed, it is fully self-contained given the tool's simplicity.

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?

Despite 0% schema coverage, description includes a dedicated PARAMETERS section explaining 'key' as exact, case-sensitive, required—adding semantics beyond the schema's type/required fields.

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 'Recall the value stored at an exact key'—a specific verb+resource. It distinguishes from siblings by mentioning memory_search and memory_semantic_search for non-exact lookups.

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 'USE WHEN' (after memory_store) and 'NOT FOR' (fuzzy/substring/semantic lookup) with direct sibling names, giving clear when-to-use and when-not-to-use guidance.

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

memory_statsA

Return statistics about the local memory database (entry count, size, tags, embedding state).

Returns counts (rows, distinct tags, total bytes), embedding index status (built / building / stale), and last-write timestamp.

USE WHEN: troubleshooting why memory_semantic_search returns no results, or sizing the user's local data footprint.

BEHAVIOR: pure read of metadata. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Declares it is a pure read of metadata with no side effects, which is essential given no annotations are present.

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?

Three concise sentences: purpose, details, use cases, behavior. No unnecessary words, front-loaded with key action.

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?

Fully covers purpose, usage triggers, behavior, and output summary for a zero-parameter tool with output schema.

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?

No parameters exist, so schema coverage is 100% by default. Description adds value by listing output fields, compensating for lack of parameter detail.

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?

Clearly states it returns statistics about the local memory database, specifying entry count, size, tags, embedding state. Distinct from sibling tools like memory_list or memory_semantic_search.

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?

Explicit 'USE WHEN' clause identifies specific scenarios: troubleshooting missing results from memory_semantic_search or sizing data footprint.

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

memory_storeA

Persist a string value under a key in ContextPulse's local memory database.

Returns confirmation with the stored key and an indication of whether the write was new or an overwrite.

USE WHEN: you need a value to survive across sessions and be recallable by exact key (preferences, agent memos, named facts). NOT FOR: fuzzy retrieval (use memory_search) or semantic similarity (use memory_semantic_search). For ephemeral session state, hold it in agent context — don't bloat persistent memory. ALTERNATIVES: route_to_journal (timestamped narrative log) is better for journaling.

BEHAVIOR: SIDE EFFECT — overwrites any existing value at the same key (last-write-wins). Persists to the local SQLite memory database; survives daemon restart. Idempotent for identical (key, value, tag) tuples. No auth or rate limits — local only.

PARAMETERS: key: stable identifier. ASCII recommended. Max 256 chars. Required. value: string to persist. Max ~1 MB. Required. tag: optional grouping label, queryable via memory_list(tag=...).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
valueYes
tagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

No annotations provided, but description discloses side effect (overwrite), persistence (survives daemon restart), idempotency, and no auth/rate limits.

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?

Well-structured with sections (USE WHEN, NOT FOR, ALTERNATIVES, BEHAVIOR, PARAMETERS). Every sentence adds value; no fluff.

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?

With output schema present, description appropriately notes return value (confirmation with key and new/overwrite indication). Covers all necessary aspects for a store operation.

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 lacks descriptions (0% coverage), but description adds crucial details: key max 256 chars ASCII, value max ~1 MB, tag optional grouping label queryable via memory_list(tag=...).

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?

Description clearly states 'Persist a string value under a key' and distinguishes from siblings like memory_search, memory_semantic_search, and route_to_journal.

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?

Explicit 'USE WHEN' and 'NOT FOR' sections with named alternatives (memory_search, memory_semantic_search, route_to_journal) and guidance on ephemeral vs persistent storage.

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

remove_from_vocabularyA

Remove a term from the voice vocabulary.

Returns confirmation with the removed term and whether the term existed.

USE WHEN: a vocabulary entry is causing wrong corrections or is no longer relevant. NOT FOR: temporarily disabling — there is no soft-disable; this is a permanent delete.

BEHAVIOR: SIDE EFFECT — DESTRUCTIVE. Removes the term from the vocabulary database; not recoverable except by re-adding. Idempotent (no-op if term doesn't exist).

PARAMETERS: term: exact spelling as stored. Required. Case-sensitive — confirm via get_vocabulary first.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Despite no annotations, the description discloses destructive nature (permanent delete, not recoverable), idempotency (no-op if term doesn't exist), and side effects. Missing details on authorization or rate limits, but sufficient for a simple destructive tool.

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?

Well-structured with clear sections (USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS). Every sentence adds value, front-loading the purpose. No fluff, compact yet comprehensive.

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 the tool's simplicity (one param, destructive action, output schema exists), the description covers all necessary aspects: purpose, usage conditions, behavioral traits, parameter specifics, and return value. Siblings like add_to_vocabulary are implicitly contrasted via the 'not for' guidance.

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?

With 0% schema description coverage, the description adds key details: parameter is required, case-sensitive, exact spelling needed, and suggests confirming via get_vocabulary first. This goes far beyond the schema's bare 'term' string.

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 'Remove a term from the voice vocabulary', specifying the verb (remove) and resource (term from voice vocabulary). It differentiates from sibling tools like add_to_vocabulary and get_vocabulary by focusing on removal.

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 'USE WHEN' (causing wrong corrections or irrelevant) and 'NOT FOR' (temporarily disabling) guidance, clearly directing when to use this tool and when not to, though no alternative tool is named.

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

route_to_journalA

Route a piece of text to the correct project's journal database.

Returns the project the entry was routed to, the journal entry ID, and storage location.

USE WHEN: the user wants to log something and you want it filed under the right project automatically. NOT FOR: identifying the project without writing — use identify_project. ALTERNATIVES: passing project_id explicitly to skip auto-detection.

BEHAVIOR: SIDE EFFECT — writes a row to the per-project journal SQLite database. Idempotent only if you pass the same content + project pair. Auto-detects the project via identify_project + get_active_project blend when project_id is omitted.

PARAMETERS: text: journal entry content. Required, non-empty. project_id: explicit project slug to route to. Omit to auto-detect.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
project_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Discloses side effect (writes to SQLite database), idempotency condition (same content+project pair), and auto-detection behavior. No annotations provided, so description fully compensates.

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 labeled sections, but slightly verbose. Every sentence adds value, but could be slightly more concise.

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?

Comprehensive for the tool's complexity: covers usage, behavior, parameters, and references output schema. No gaps for an agent to invoke correctly.

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?

Adds meaning beyond schema: describes text as 'Required, non-empty' and project_id as 'explicit project slug... Omit to auto-detect.' Schema coverage is 0%, so this is essential.

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?

Clearly states the tool routes text to a project's journal database, specifies return values (project, journal entry ID, storage location), and distinguishes from siblings via 'ALTERNATIVES' mentioning identify_project.

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 'USE WHEN', 'NOT FOR', and 'ALTERNATIVES' sections, giving clear guidance on when to use this tool vs alternatives like identify_project.

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

search_clipboardA

Full-text search over the clipboard history.

Returns matching entries with timestamp, snippet, and source application.

USE WHEN: the user asks "find that thing I copied about X" / "did I copy the bug ID." NOT FOR: non-text clipboard content — only text entries are indexed.

BEHAVIOR: pure read. Sensitive entries are excluded from the index (see get_clipboard_history).

PARAMETERS: query: substring or FTS expression. Required, non-empty. limit: max results. Range 1-100. Default 20.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Without annotations, the description declares the tool as 'pure read' and mentions that sensitive entries are excluded from the index, referencing get_clipboard_history for details. While this covers key behavioral traits, additional info on performance or pagination would enhance 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 concise with clear section headers (USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS). Every sentence adds value and the total length is appropriate for the tool's complexity.

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 the output schema exists (though not shown), the description specifies return fields (timestamp, snippet, source application) and covers the key constraint (text-only, sensitive exclusion). For a search tool, this is complete and actionable.

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?

The input schema has 0% description coverage, so the description adds critical meaning: query can be a 'substring or FTS expression', is required and non-empty; limit specifies 'max results', range '1-100', and default 20. This goes well beyond the raw 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 clearly states the tool performs 'Full-text search over the clipboard history' and lists the returned fields (timestamp, snippet, source application). This verb+resource combination distinguishes it from siblings like get_clipboard_history and search_history.

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 'USE WHEN' and 'NOT FOR' sections with examples (e.g., 'find that thing I copied about X', 'did I copy the bug ID'), and clarifies that only text entries are indexed, effectively guiding the agent on appropriate use cases.

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

search_historyA

Full-text search the OCR history of past screen captures.

Returns matching entries with timestamp, snippet of matched text, and capture reference, ordered by relevance.

USE WHEN: the user asks "when did I see X" / "find that error message" / "show me where I was working on Y." NOT FOR: vector similarity (use memory_semantic_search), live screen (get_screen_text), or non-text content (get_recent).

BEHAVIOR: pure read; sub-100 ms for typical buffers. Search is case-insensitive and runs against OCR text only — visual elements without text won't match.

PARAMETERS: query: substring or simple SQLite FTS expression. Required, non-empty. limit: max results. Range 1-100. Default 20.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully covers behavior: 'pure read; sub-100 ms for typical buffers. Search is case-insensitive and runs against OCR text only — visual elements without text won't match.' No contradictions.

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 well-structured with sections, each sentence adds value, and it's not overly verbose—efficient and front-loaded.

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 the tool's complexity and the presence of an output schema, the description covers return fields, ordering, and behavioral constraints, making it fully complete for an AI agent.

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?

Despite 0% schema coverage, the description adds a dedicated PARAMETERS section explaining each parameter in detail: query as 'substring or simple SQLite FTS expression. Required, non-empty.' and limit with range and default.

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 'Full-text search the OCR history of past screen captures,' specifying the action (search), resource (OCR history), and scope (past screen captures). It also distinguishes from siblings by explicitly naming alternatives.

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 includes explicit 'USE WHEN' and 'NOT FOR' sections, providing clear guidance on when to use this tool and naming alternative tools for different use cases.

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

search_voiceA

Full-text search over the user's voice transcription history.

Returns matching segments ranked by relevance with timestamp, transcript snippet, and full-segment reference.

USE WHEN: the user references something they said ("when did I mention X", "find the part where I talked about Y"). NOT FOR: live transcription — ContextPulse transcribes asynchronously; very recent audio may not be indexed yet.

BEHAVIOR: pure read. Substring + FTS search. Sub-second for typical buffers.

PARAMETERS: query: substring or FTS expression. Required, non-empty. limit: max results. Range 1-100. Default 20.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavior: pure read operation, substring + FTS search, sub-second response for typical buffers, and asynchronous indexing limitation.

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?

Extremely concise with clear sections (USE WHEN, NOT FOR, BEHAVIOR, PARAMETERS). Every sentence adds value without redundancy.

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?

Output schema exists, and description adequately describes return format (matching segments with timestamp, snippet, reference). Covers all needed context: purpose, usage, behavior, parameters.

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?

With 0% schema description coverage, the description fully compensates by explaining both parameters: query as substring/FTS expression, required non-empty; limit as max results with range and default.

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?

Clearly states full-text search over voice transcription history, with specific verb and resource. Distinguishes from sibling tools like search_clipboard and search_history by focusing on voice data.

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 provides USE WHEN and NOT FOR conditions, and mentions the limitation regarding very recent audio not being indexed, guiding when to use this tool vs. live transcription or other search tools.

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. Dates show when Glama detected each change.

  1. 26 tool updatesv0.1.2
    • Changedadd_to_vocabulary3 fields changed
      • addedInput schema / properties / pronunciation
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Pronunciation"
        +}
      • addedInput schema / properties / term
        Added value: +{
        +  "title": "Term",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "term"
        +]
    • Changedfind_related_context3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedget_activity_summary1 field changed
      • addedInput schema / properties / hours
        Added value: +{
        +  "default": 1,
        +  "title": "Hours",
        +  "type": "integer"
        +}
    • Changedget_app_usage1 field changed
      • addedInput schema / properties / hours
        Added value: +{
        +  "default": 1,
        +  "title": "Hours",
        +  "type": "integer"
        +}
    • Changedget_clipboard_history1 field changed
      • addedInput schema / properties / n
        Added value: +{
        +  "default": 10,
        +  "title": "N",
        +  "type": "integer"
        +}
    • Changedget_context_at2 fields changed
      • addedInput schema / properties / minutes_ago
        Added value: +{
        +  "title": "Minutes Ago",
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "minutes_ago"
        +]
    • Changedget_correction_history1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "title": "Limit",
        +  "type": "integer"
        +}
    • Changedget_project_context2 fields changed
      • addedInput schema / properties / project_id
        Added value: +{
        +  "title": "Project Id",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "project_id"
        +]
    • Changedget_recent1 field changed
      • addedInput schema / properties / n
        Added value: +{
        +  "default": 10,
        +  "title": "N",
        +  "type": "integer"
        +}
    • Changedget_recent_touch_events1 field changed
      • addedInput schema / properties / n
        Added value: +{
        +  "default": 50,
        +  "title": "N",
        +  "type": "integer"
        +}
    • Changedget_recent_voice1 field changed
      • addedInput schema / properties / n
        Added value: +{
        +  "default": 10,
        +  "title": "N",
        +  "type": "integer"
        +}
    • Changedget_screenshot1 field changed
      • addedInput schema / properties / monitor_index
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Monitor Index"
        +}
    • Changedget_touch_stats1 field changed
      • addedInput schema / properties / hours
        Added value: +{
        +  "default": 1,
        +  "title": "Hours",
        +  "type": "integer"
        +}
    • Changedget_voice_stats1 field changed
      • addedInput schema / properties / hours
        Added value: +{
        +  "default": 24,
        +  "title": "Hours",
        +  "type": "integer"
        +}
    • Changedidentify_project2 fields changed
      • addedInput schema / properties / text
        Added value: +{
        +  "title": "Text",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "text"
        +]
    • Changedmemory_forget2 fields changed
      • addedInput schema / properties / key
        Added value: +{
        +  "title": "Key",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "key"
        +]
    • Changedmemory_list1 field changed
      • addedInput schema / properties / tag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Tag"
        +}
    • Changedmemory_recall2 fields changed
      • addedInput schema / properties / key
        Added value: +{
        +  "title": "Key",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "key"
        +]
    • Changedmemory_search3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedmemory_semantic_search3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedmemory_store4 fields changed
      • addedInput schema / properties / key
        Added value: +{
        +  "title": "Key",
        +  "type": "string"
        +}
      • addedInput schema / properties / tag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Tag"
        +}
      • addedInput schema / properties / value
        Added value: +{
        +  "title": "Value",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "key",
        +  "value"
        +]
    • Changedremove_from_vocabulary2 fields changed
      • addedInput schema / properties / term
        Added value: +{
        +  "title": "Term",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "term"
        +]
    • Changedroute_to_journal3 fields changed
      • addedInput schema / properties / project_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Project Id"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "title": "Text",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "text"
        +]
    • Changedsearch_clipboard3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedsearch_history3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedsearch_voice3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "title": "Query",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
  2. 36 tool updatesv0.1.0
    • First observedabout
    • First observedadd_to_vocabulary
    • First observeddescribe_workspace
    • First observedfind_related_context
    • First observedget_active_project
    • First observedget_activity_summary
    • First observedget_app_usage
    • First observedget_buffer_status
    • First observedget_clipboard_history
    • First observedget_context_at
    • First observedget_correction_history
    • First observedget_monitor_summary
    • First observedget_project_context
    • First observedget_recent
    • First observedget_recent_touch_events
    • First observedget_recent_voice
    • First observedget_screen_text
    • First observedget_screenshot
    • First observedget_session_summary
    • First observedget_touch_stats
    • First observedget_vocabulary
    • First observedget_voice_stats
    • First observedidentify_project
    • First observedlist_projects
    • First observedmemory_forget
    • First observedmemory_list
    • First observedmemory_recall
    • First observedmemory_search
    • First observedmemory_semantic_search
    • First observedmemory_stats
    • First observedmemory_store
    • First observedremove_from_vocabulary
    • First observedroute_to_journal
    • First observedsearch_clipboard
    • First observedsearch_history
    • First observedsearch_voice

TDQS

A4.7/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Tools like get_screen_text, get_screenshot, get_recent, and get_context_at are well-delineated in their descriptions, and memory operations are separated by exact, substring, and semantic search. The tool set is well-organized and logically partitioned.

Naming Consistency5/5

All tool names follow a consistent snake_case convention with predictable verb_noun patterns (e.g., get_activity_summary, add_to_vocabulary, search_history). The naming is uniform and intuitive, facilitating easy understanding of each tool's function.

Tool Count4/5

With 36 tools, the count is relatively high, but the server's scope is broad, covering screen capture, OCR, voice transcription, clipboard, memory, project context, activity tracking, and more. Each tool serves a specific need, and the descriptions justify their inclusion. The count is slightly above what is typically considered ideal, but it is still well-scoped and not excessive.

Completeness5/5

The tool set provides comprehensive coverage of the ContextPulse domain, including capture, recall, search, statistics, vocabulary management, memory operations, project context, and activity summaries. All major functionality is exposed, and there are no obvious gaps. The design intentionally avoids destructive operations like clear-all, which is a deliberate choice.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

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

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ContextPulse/contextpulse'

If you have feedback or need assistance with the MCP directory API, please join our Discord server