Intel NPU Tools MCP Server
The Intel NPU Tools MCP Server equips AI agents with local, private, NPU-accelerated capabilities on Linux. Key functions include:
NPU status & diagnostics – verify Intel AI Boost and OpenVINO devices.
Speech transcription – transcribe audio files or live microphone recording using Whisper Base INT8 on the NPU.
OCR – extract English and Arabic text from images or capture the monitor (NPU + Tesseract).
Screen to text – convert screenshots into structured text with bounding boxes, saving token usage.
Semantic search – index local files/dirs with Qwen3 Embedding INT8, then search by meaning with optional reranking.
Context filtering – retrieve relevant verbatim lines from large files based on a query, with line numbers.
Index status – show indexed roots, file count, and chunk count.
Desktop tools – launch interactive speech-to-text or screenshot OCR applications.
Provides tools for utilizing the Intel AI Boost NPU on Arrow Lake processors, enabling local speech transcription, screenshot OCR, semantic search, and hardware diagnostics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Intel NPU Tools MCP ServerTranscribe the audio file meeting.mp3"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Intel NPU Tools for Linux
An unofficial, community-maintained toolkit that makes the integrated Intel AI Boost NPU in Arrow Lake processors useful on Linux. It provides private semantic search, local speech transcription, screenshot OCR, hardware verification, and twelve MCP tools that AI agents can call.
This project is not affiliated with, sponsored by, or endorsed by Intel Corporation. Intel, Intel Core, OpenVINO, and Intel AI Boost are trademarks of their respective owners.
Why this exists
Linux can expose an Arrow Lake NPU as /dev/accel/accel0, but applications still need Intel's Level Zero NPU user-mode driver, OpenVINO, compatible models, permissions, and integration code. This repository assembles those pieces into useful desktop and agent workflows.
The NPU is a good fit for efficient background inference. It does not replace a discrete GPU for model training, large language models, or image generation.
Related MCP server: npu-vision-fallback
Features
Speech to text: multilingual Whisper Base INT8 runs locally on the NPU. Whisper Small is available for noisier rooms; see the roadmap for the accuracy and latency trade.
Screenshot OCR: select a region and copy recognized English or Arabic text.
Private semantic search: index local documents, logs, and source code with Qwen3-Embedding 0.6B INT8, then retrieve passages by meaning.
Smaller agent context:
context_filterreturns only the lines of a large log or file that answer a question, verbatim and with line numbers, andscreen_to_textrenders a screen as a few hundred tokens of structured text rather than a multi-thousand-token image.MCP server: Codex, Claude, Gemini CLI, AGY/Antigravity CLI, Hermes, Antigravity IDE, OpenCode, and other MCP clients can use all twelve tools.
Hardware diagnostics: report every OpenVINO device and confirm
Intel(R) AI Boostis available.Reversible installation: user applications and models are isolated under
~/.local; the uninstaller deliberately preserves system drivers.
Supported hardware and software
The initial tested target is:
Intel Arrow Lake integrated NPU 3720, PCI ID
8086:ad1dIntel Core Ultra 200-series desktop processors, including Core Ultra 9 285K
Ubuntu 24.04 or an Ubuntu 24.04-compatible distribution
Linux kernel 6.8 or newer with
intel_vpuKDE Plasma, GNOME, COSMIC, or a wlroots compositor; X11 works too. Screenshots use whichever of spectacle, gnome-screenshot, cosmic-screenshot, grim, maim or scrot is installed, and the clipboard uses wl-clipboard, xclip or xsel.
OpenVINO officially identifies Arrow Lake's NPU 3720 by PCI ID 0xAD1D. Other Intel NPU generations may work with code changes, but the bundled driver safety check intentionally refuses unknown PCI IDs.
What it looks like
The control panel is where every feature can be tried and every setting changed.

Search indexes a folder and retrieves passages by meaning, and context_filter
returns only the lines of one large file that answer a question.

Settings that used to be environment variables are editable and persistent. Each option states what it measured, so the trade is visible before it is made.

The status tab reports the device, the driver, which models are installed, and what the desktop session can actually do — useful when a screenshot or the clipboard is not working.

Regenerate these with scripts/capture-screenshots.sh. It runs each window on a
virtual display, so the images do not depend on anyone's wallpaper or theme and
stay reproducible as the interface changes.
Install from a package
Native packages install the toolkit system-wide. They deliberately contain no
models and no OpenVINO runtime: those are large, are redistributed under their
own licences, and OpenVINO is not in any distribution archive. Each user runs
intel-npu-tools-setup once afterwards to build their own environment and
download the models, which also keeps package installation off the network.
./scripts/build-deb.sh # Debian, Ubuntu, Pop!_OS
cd packaging && makepkg -si # Arch
rpmbuild -bb packaging/intel-npu-tools.spec \
--define "_projectdir $PWD" # Fedora (openSUSE and EL untested)All three install the same tree from scripts/stage-package.sh, so they cannot
drift apart. Then, as your own user:
intel-npu-tools-setup # add --with-reranker and --with-whisper-small if wantedQuick installation
git clone https://github.com/etreby/intel-npu-tools.git
cd intel-npu-tools
./install.sh --with-driver--with-driver installs Intel's signed Ubuntu 24.04 NPU user-mode packages and firmware, adds the current user to render, creates an isolated Python environment, downloads the models from their official upstream locations, and installs the desktop and MCP tools.
Log out and back in after the first driver installation, then verify:
intel-npu-infoExpected output includes:
"NPU": "Intel(R) AI Boost"If the driver is already installed, omit --with-driver:
./install.shTo skip automatic MCP client registration:
./install.sh --without-mcpThe model download is approximately 800 MB in total, including Whisper, OCR, and the roughly 600 MB embedding model. Two optional models are excluded by default: --with-whisper-small (~250 MB, better in noise) and --with-reranker (~300 MB, sharper search results).
Semantic search in 30 seconds
intel-npu-search index ~/Projects/my-project
intel-npu-search search "Where is authentication configured?"
intel-npu-search statusIndexing is incremental and remains local. See the semantic-search guide for supported files, performance, privacy boundaries, and customization.
Desktop usage
Launch these applications from the desktop menu:
Intel NPU Speech to Text: click Start, speak, then Stop and transcribe. The result is copied to the clipboard.
Intel NPU Screenshot OCR: select a rectangular region. Recognized text is displayed and copied.
Intel NPU Control Panel: try every feature, change settings, and see what the NPU and the desktop session can actually do. Run
intel-npu-panel.
On KDE, install.sh registers two global shortcuts:
Meta+F9— Speech to TextMeta+Alt+O— Screenshot OCR
Meta is normally the Windows-logo key. The shortcuts start working after your next login, because KDE's shortcut daemon reads its configuration once at session start; restarting it during an install would briefly drop every other shortcut on the system. If you had already bound either application to a key of your own, the installer leaves your binding alone, and it refuses to write a key another component already owns rather than registering one KDE would silently discard. Speech uses Meta+F9 rather than the Meta+Alt+S of earlier versions, because KDE's accessibility component binds Meta+Alt+S to "Toggle Screen Reader On and Off" by default, so that shortcut could never have worked. On a desktop without KDE's configuration tools the registration is skipped and the applications are launched from the desktop menu instead.
AI agent and MCP usage
The local stdio MCP command is:
intel-npu-mcpIt exposes:
Tool | Purpose |
| Verify OpenVINO and list available devices |
| Transcribe a local audio file on the NPU |
| Record the default microphone for a bounded duration |
| Extract English/Arabic text from an image |
| Capture and OCR the current monitor |
| Read a screen as structured text instead of an image |
| Incrementally index a text file or directory on the NPU |
| Retrieve ranked local passages by meaning |
| Return only the parts of a large file that answer a question |
| Show indexed roots, files, chunks, and database path |
| Open the interactive speech application |
| Open interactive region OCR |
Example agent requests:
Use intel-npu-tools to transcribe ~/recording.m4a.
Use the NPU to OCR ~/Pictures/error.png.
Record my microphone for 15 seconds and transcribe it.
Read the text currently visible on my monitor.
Index ~/Projects/my-project, then find where authentication is configured.
Search my indexed documents for the Windows boot recovery procedure.Manual Codex registration:
codex mcp add intel-npu-tools -- "$HOME/.local/bin/intel-npu-mcp"Manual Claude Code registration:
claude mcp add --scope user intel-npu-tools -- "$HOME/.local/bin/intel-npu-mcp"Manual Hermes registration:
hermes mcp add intel-npu-tools --command "$HOME/.local/bin/intel-npu-mcp"Manual Gemini CLI registration:
gemini mcp add --scope user intel-npu-tools "$HOME/.local/bin/intel-npu-mcp"AGY/Antigravity CLI reads global servers from ~/.gemini/config/mcp_config.json:
{
"mcpServers": {
"intel-npu-tools": {
"command": "/home/YOUR_USER/.local/bin/intel-npu-mcp",
"args": []
}
}
}OpenCode reads global configuration from ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"intel-npu-tools": {
"type": "local",
"command": ["/home/YOUR_USER/.local/bin/intel-npu-mcp"],
"enabled": true,
"timeout": 60000
}
}
}Any MCP client can use this stdio configuration:
{
"mcpServers": {
"intel-npu-tools": {
"command": "/home/YOUR_USER/.local/bin/intel-npu-mcp",
"args": []
}
}
}How the NPU is utilized
Microphone/audio ──> Whisper Base INT8 ──> OpenVINO GenAI ──> Intel NPU
Screenshot/image ──┬─> text detector + recognizer ──> OpenVINO ──> Intel NPU
└─> Tesseract (preferred for layout, punctuation, Arabic)
Local text ──> chunks ──> Qwen3 Embedding INT8 ──> Intel NPU ──> SQLite vectors
AI agent ──> local stdio MCP server ──> the same NPU pipelinesAll inference targets NPU explicitly. The included tools do not silently redirect workloads to a discrete GPU. This allows an NVIDIA or Intel GPU to remain available for gaming, rendering, Ollama, or larger AI workloads.
Privacy
No network server is started.
MCP communication uses a local child process over stdin/stdout.
Audio, screenshots, indexed text, and embeddings are processed and stored locally.
Network access is needed only during installation to download software and models.
Temporary recordings and screenshots are deleted after processing.
Documentation
Troubleshooting
/dev/accel/accel0 is missing
lspci -nn | grep -i ad1d
lsmod | grep intel_vpu
journalctl -k -b | grep -i intel_vpuUpdate the kernel/firmware for your distribution before replacing unrelated graphics drivers.
NPU exists but OpenVINO shows only CPU/GPU
groups
ls -l /dev/accel/accel0The user must belong to render. Log out and back in after group changes.
Speech produces no text
Check the default PipeWire microphone:
pactl get-default-source
pw-record --rate 16000 --channels 1 /tmp/microphone-test.wavOCR limitations
Both engines run on every image. The NPU detects text regions and recognizes them with Intel's compact model, which covers only lowercase Latin letters and digits. Tesseract reads punctuation, layout, English, and Arabic, so its output is used as the returned text whenever it produces any; the NPU result is returned when Tesseract is missing, fails, or finds nothing. npu_regions and npu_text are always reported separately so you can see what the NPU contributed. Stylized fonts and very small text may remain imperfect.
install.sh installs Tesseract. Without it, OCR still works but falls back to the NPU-only text.
For NPU compilation, semantic-search, and MCP diagnostics, use the complete debugging guide.
Development
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
python -m compileall -q srcSee CONTRIBUTING.md for contribution guidelines and proposed areas of work.
Uninstall
./uninstall.shThe uninstaller removes user applications, models, and MCP registrations. It intentionally preserves system-level NPU firmware and drivers.
Upstream components and documentation
License
Project code is released under the MIT License. Downloaded drivers, models, runtimes, and trademarks remain under their respective upstream licenses. See THIRD_PARTY_NOTICES.md.
Available Tools
12 toolscontext_filterA
Extract only the parts of a large local text file that are relevant to a question.
Use this instead of reading a big build log, test output, diff, or data file into your context. Write the output to a file first, then filter it:
make 2>&1 | tee /tmp/build.log
context_filter("/tmp/build.log", "why did the linker step fail")Returns spans copied verbatim from the file with exact line numbers, never a summary, so quoted text and line numbers can be cited. It also reports how much was dropped and how close the best dropped chunk scored, so you can tell when to widen the query or raise limit rather than assuming full coverage.
Chunks are embedded on the Intel NPU and ranked by cosine similarity; nothing is written to the semantic index and nothing leaves this machine. This is not a substitute for grep: when you know the exact string to look for, grep is faster, free, and exact. Files under 4 KB and over 256 KB are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| query | Yes | ||
| context_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: returns verbatim spans, never summaries, reports dropped coverage, uses Intel NPU embedding, writes nothing to semantic index, and has file size limits (4KB-256KB). It also notes it does not substitute for grep. This is comprehensive transparency without annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, usage guidance, example, output behavior, technical details, constraints. Each sentence carries useful information; no filler. It is longer than average, but justified by the tool's complexity and the absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (NPU-based embedding, filtering, output reporting), the description covers purpose, use cases, alternatives, constraints, privacy, and output format. There is no output schema, but the description clearly explains the returned data: verbatim spans with line numbers and dropped-score statistics. Missing parameter documentation is a minor gap, but the overall context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description mentions only the two required parameters (path and query) via example, plus 'limit' implicitly ('raise limit'). The parameter context_lines remains undocumented in both description and schema. The description adds some meaning beyond the schema, but not enough to fully compensate for the 0% coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Extract only the parts of a large local text file that are relevant to a question.' This is a specific verb+resource (extract from file) and differentiates itself from grep and other sibling tools. The example invocation further clarifies its exact use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it (instead of reading big logs, test output, diffs) and when not to use it: 'This is not a substitute for grep: when you know the exact string to look for, grep is faster, free, and exact.' It also suggests a workflow with tee and filtering, which provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
npu_statusA
Report OpenVINO devices and whether Intel AI Boost is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. The word 'Report' implies a read-only query, and no side effects are suggested. However, it does not explicitly confirm non-destructiveness, required permissions, or return format. For a simple status tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence of 12 words, front-loaded with the action verb 'Report'. Every word is necessary and the description is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description fully specifies its sole function: reporting OpenVINO devices and Intel AI Boost availability. No additional context is needed for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric, baseline is 4. The description does not need to clarify parameter meanings because schema coverage is 100% (empty object) and no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and clearly identifies the resource (OpenVINO devices and Intel AI Boost availability). It distinguishes itself from sibling tools (which focus on transcription, OCR, and semantic indexing) by addressing a distinct hardware/software status topic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking device status but does not explicitly state when to use it or when to avoid it. No alternatives are named, but given the tool's unique purpose, the context is reasonably clear and requires no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ocr_current_monitorA
Capture the current monitor and extract its text.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only mentions 'capture' and 'extract text,' but lacks details such as whether a screenshot is taken, if screen recording permissions are required, how the text is returned (e.g., string, file), or any side effects. This is a significant gap for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of eight words, directly front-loaded with the action and outcome. Every word contributes to understanding. It is appropriately concise for a tool with no parameters and a simple action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description provides a basic understanding of what it does and that it returns text. However, it omits important context such as whether the tool opens a UI or runs silently, how the extracted text is delivered, and any prerequisites (e.g., display access). It is minimally viable but lacks depth for a tool with no annotations or output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage (trivially). With no parameters to describe, the description does not need to add parameter information. The baseline for no-parameter tools is 4, and nothing in the description detracts from that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: capture the current monitor and extract its text. This distinguishes it from sibling tools like ocr_image, which likely processes a specified image, and transcribe_audio, which handles audio. The verb 'capture' is specific in context, implying a screen capture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you want to extract text from the current screen. However, it does not explicitly state when to use this tool versus alternatives like ocr_image or open_ocr_selector, nor does it provide any exclusions or prerequisites. Basic implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ocr_imageB
Extract English and Arabic text from a local image using NPU text models.
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It adds context 'using NPU text models', but fails to mention what the extracted text looks like (return format), whether it is synchronous, supported image formats, or failure behavior. This is insufficient for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the core function. Every word adds value, with no filler or redundancy. It is appropriately sized for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and only one parameter, the description should clarify what the function returns. 'Extract text' implies returning text but does not specify whether it is a plain string, a list of segments, or includes confidence scores. No mention of prerequisites like NPU support or image format constraints also leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It indirectly hints that image_path refers to a local image, but does not specify path format, acceptable image extensions, file size limits, or whether the path is relative or absolute. This adds marginal meaning beyond the schema's simple 'Image Path' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Extract' and the resource 'text from a local image', specifying supported languages (English and Arabic) and method (NPU text models). This distinguishes it from siblings like ocr_current_monitor (which targets the current monitor) and transcribe_audio (which handles audio).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through 'local image' which contrasts with the monitor-based sibling ocr_current_monitor, but there is no explicit guidance on when to choose this tool over alternatives or mention of prerequisites. The description does not provide exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_ocr_selectorB
Open the rectangular screenshot OCR selector.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It merely restates the tool's name ('Open...selector') without explaining what 'open' entails, whether it returns a selection, blocks, or has side effects. This adds no value beyond the name itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short, front-loaded sentence that states the purpose efficiently. No wasted words or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists (which likely documents return value), the description minimally suffices. However, it lacks any workflow context about how this selector fits with sibling OCR tools, leaving the agent without guidance on when to call it. It is a viable but incomplete description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There is no additional parameter information needed; the description correctly omits param details since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Open') and resource ('rectangular screenshot OCR selector'). It distinguishes this tool from the sibling OCR tools like ocr_image and ocr_current_monitor, which perform OCR on already-acquired images rather than opening a selection UI.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the alternatives. It does not mention that this selector is likely a prerequisite for other OCR tools or that it should be used before capturing a screenshot region. No exclusions or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_speech_appA
Open the interactive speech-to-text desktop application.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Open', but does not explain whether the application launches asynchronously, requires user interaction, or what the output/return value represents. This is a significant gap for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant information. It is appropriately sized for a parameterless tool and front-loads the actionable verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple and has an output schema, the description does not clarify what outcome the agent can expect (e.g., success message, process launch, or UI opened). The lack of annotations and usage guidance leaves some contextual gaps, but complexity is low enough that this is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already provides complete coverage (100%). The description adds no parameter details, but none are needed; a baseline of 4 is appropriate for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Open') and the target resource ('interactive speech-to-text desktop application'). It is unambiguous and distinct from sibling tools that handle transcription or OCR operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. It does not mention prerequisites, typical scenarios, or exclusions, leaving the agent to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_and_transcribeA
Record the default microphone for 1-60 seconds and transcribe on the NPU.
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the duration range and NPU-based processing, but it does not describe output format, error handling, microphone permissions, or whether the recording is saved. These are notable gaps for a recording tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that conveys the tool's purpose, duration limit, and hardware context without redundancy. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and only one simple parameter, the description covers the core functionality and duration range. Minor gaps exist in usage guidance, but overall it is complete enough for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single undocumented parameter 'seconds' with a default of 10. The description adds crucial semantics by specifying the allowed range of 1-60 seconds, which is not present in the schema. This directly clarifies parameter meaning and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records from the default microphone for 1-60 seconds and transcribes on the NPU. It uses specific verbs ('record', 'transcribe') and identifies the resource ('default microphone'), distinguishing it from siblings like 'transcribe_audio' (which only transcribes) and 'npu_status' (which checks hardware).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the tool is for recording and transcribing audio in one step. However, it does not explicitly mention when to use this vs. alternatives like 'transcribe_audio' for existing audio files, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_to_textA
Read a screenshot as compact structured text instead of sending an image.
A screenshot costs a vision model roughly 1,600 to 4,800 image tokens. This returns the same screen as a few hundred tokens of text in reading order, with a bounding box per line, so you can see what is on screen and where to click without spending them. Omit image_path to capture the current monitor.
detail is "lines" (default: text plus one box per line), "text" (cheapest, reading order only), or "words" (a box per word — on a dense screen this can cost MORE tokens than the screenshot did, and the reply says so when it has).
Read these limits before relying on it. The text comes from Tesseract OCR, so it is a best-effort transcription and not a user-interface tree: it cannot report widget types, enabled or checked state, focus, scroll position, or anything off-screen, and it misreads small or low-contrast text. If the target is a web page, use Playwright's accessibility tree instead — that is already structured text, it is exact, it includes content scrolled out of view, and it costs no model tokens to produce. This tool is for surfaces with no such tree: native desktop applications, remote desktops, canvas and WebGL, video frames, and scanned documents.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | lines | |
| image_path | No | ||
| min_confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility and delivers thoroughly. It discloses that output is from Tesseract OCR (best-effort, not a UI tree), lists specific limitations (cannot report widget types, enabled/checked state, focus, scroll position, off-screen content, misreads small/low-contrast text), and warns that the 'words' detail can cost more tokens than a screenshot. This goes well beyond the minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized given the tool's complexity. It front-loads the core purpose in the first sentence, then efficiently covers cost motivation, parameter details, limitations, and alternatives in a well-structured flow. Every paragraph earns its place, and there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations or output schema, the description covers purpose, usage, limitations, return format (reading order text with bounding boxes), and parameter semantics for most parameters. The only gap is min_confidence, which is left unspecified. Despite this, the description is largely complete for an agent to use the tool safely and effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions (coverage 0%), so the description must compensate. It does for two of three parameters: detail (explains 'lines', 'text', 'words' with trade-offs) and image_path (explains omission captures the monitor). However, min_confidence is never mentioned, so the agent is left guessing what it controls. This slight omission prevents a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific action: 'Read a screenshot as compact structured text instead of sending an image.' It specifies the resource (screenshot/image) and the output (structured text with bounding boxes). It also distinguishes itself from sibling tools like ocr_image and ocr_current_monitor by framing it as a token-saving alternative and contrasting with Playwright's accessibility tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: for surfaces without an accessibility tree (native desktop apps, remote desktops, canvas/WebGL, video frames, scanned documents). It gives a clear alternative: 'If the target is a web page, use Playwright's accessibility tree instead' and explains why. It also provides operational guidance on omitting image_path to capture the current monitor and how to choose the detail level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_indexA
Index a local text file or directory for private semantic search on the Intel NPU.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention whether the operation is destructive, requires specific permissions, modifies existing indexes, or what the output looks like. The phrase 'Index a local text file or directory' hints at reading files and creating an index, but side effects are not disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and resource, and contains no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description is the only source of information. It does not explain what the tool returns, whether it can be run repeatedly, or how the index integrates with semantic_search. While the tool has only one parameter, key operational details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes 'path' only as a string, but the description adds that it should be a local text file or directory, which clarifies the expected input. This compensates for the 0% schema description coverage, though it could specify supported file types or recursion behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Index') and resource ('local text file or directory'), and specifies its purpose ('for private semantic search on the Intel NPU'). It distinguishes from siblings like semantic_search, which searches, and semantic_index_status, which checks status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used before semantic_search to build an index, but it does not explicitly state when to use it vs alternatives or mention any prerequisites or exclusions. It provides context but no direct guidance on choosing between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_index_statusA
Report the local semantic index database, roots, file count, and chunk count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. The verb 'Report' clearly indicates a read-only, non-destructive operation. While it does not disclose edge-case behaviors (e.g., what happens if the index is missing), the zero-parameter read-only nature is transparent and adequate for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action ('Report') and immediately lists the data items. No filler or redundant wording. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (0 params, no output schema), and the description lists the key outputs (database, roots, file count, chunk count). It gives a clear picture of what to expect from the tool. It does not specify the return format, but for a status tool this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters, so there is no parameter ambiguity. The description fully covers the tool's inputs by having none. According to the rubric, a baseline of 4 is appropriate for 0-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Report' and clearly identifies the resource (local semantic index database) plus the exact items being reported (roots, file count, chunk count). It distinguishes itself from sibling tools like semantic_index or semantic_search by focusing on status/read-only reporting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking the state of the semantic index, but does not explicitly state when to use it relative to alternatives (e.g., before indexing or searching). No exclusions are mentioned, but the purpose is self-evident enough to warrant a mid-range score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchA
Search indexed local files by meaning using Intel NPU embeddings.
When the optional reranker model is installed, the top passages are re-scored
by a cross-encoder and each hit gains a rerank_score. That score is an
unbounded logit, not a cosine, so do not compare it against score. Pass
rerank=false to skip the extra second of work.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| limit | No | ||
| query | Yes | ||
| rerank | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It transparently explains the optional reranker, the unbounded logit nature of rerank_score, and the time tradeoff. It does not cover the full return structure, but the output schema fills that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the purpose is in the first sentence, followed by a caveat paragraph that adds behavioral nuance. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the lack of annotations, and moderate complexity, the description covers the core purpose, a key behavioral caveat, and an implicit prerequisite. It could add more detail about root and limit, but overall it is sufficiently complete for selection and initial invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides rich semantics for the rerank parameter (what rerank_score is, how to disable it), but leaves root and limit unexplained beyond their names; query is implied by 'search'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Search indexed local files by meaning using Intel NPU embeddings.' This clearly distinguishes the tool from siblings like semantic_index and semantic_index_status, and states the method of search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'indexed local files' implies the tool is used after indexing and for semantic rather than keyword search. It also provides conditional guidance for reranking ('Pass rerank=false to skip the extra second of work'), though it doesn't explicitly name alternative tools for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audioA
Transcribe a local audio file on the Intel NPU.
| Name | Required | Description | Default |
|---|---|---|---|
| audio_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions 'local' and 'Intel NPU' which are valuable constraints, but does not disclose potential side effects, required permissions, or limitations like supported audio formats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single sentence with 8 words, focusing directly on the action. There is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema, so the description covers the essentials. It lacks details on file formats or hardware requirements beyond the NPU, but given the low complexity, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the parameter name 'Audio Path' with no description. The description clarifies that the parameter is the path to a local audio file, adding meaning about its nature and locality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Transcribe' and identifies the resource as 'a local audio file', distinguishing it from siblings like 'record_and_transcribe' which implies recording first. The hardware detail 'on the Intel NPU' also adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for existing local files, but does not explicitly mention alternatives or when not to use it. Sibling 'record_and_transcribe' suggests a related but different workflow, but no comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.3.0- Added
context_filter - Added
screen_to_text - Changed
semantic_search1 field changed- added
Input schema / properties / rerankAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rerank" +}
10 tool updates
v0.2.0- First observed
npu_status - First observed
ocr_current_monitor - First observed
ocr_image - First observed
open_ocr_selector - First observed
open_speech_app - First observed
record_and_transcribe - First observed
semantic_index - First observed
semantic_index_status - First observed
semantic_search - First observed
transcribe_audio
TDQS
Scored across 12 tools
Several tools overlap: ocr_image, ocr_current_monitor, and screen_to_text all perform OCR, with screen_to_text also able to capture the current monitor like ocr_current_monitor. However, the descriptions clarify their distinct intents: screen_to_text returns structured, coordinate-aware text for UI automation, while ocr_* are straightforward text extraction. The audio and semantic search tools are more clearly separated, though context_filter and semantic_search both use embeddings in different ways.
Tool names mix verb-first and noun-first patterns inconsistently: verbs appear in ocr_image, transcribe_audio, record_and_transcribe, open_speech_app, and open_ocr_selector, while nouns lead semantic_index, semantic_search, context_filter, npu_status, and semantic_index_status. Status tools are not uniformly named (npu_status vs semantic_index_status), and screen_to_text uses a prepositional phrase instead of a verb_noun form. This creates a haphazard feel that hinders predictability.
Twelve tools is within the typical well-scoped range, but the inclusion of four OCR-related tools (ocr_image, ocr_current_monitor, screen_to_text, open_ocr_selector) feels redundant; one or two could be merged without losing capability. The count is not excessive, though minor trimming would improve focus.
The NPU domain is broad, but this server effectively covers the highlighted use cases: OCR, audio transcription, and semantic search. Gaps include no way to delete or remove files from the semantic index, no model management or listing beyond basic status, and limited OCR language support (English/Arabic only). These are workable for most tasks, so the surface is nearly complete rather than severely lacking.
Maintenance
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
A live, curated feed of new AI agent capabilities across MCP, SDKs, models, and APIs.
MCP-Native LLM Orchestration Agent
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to diagnose, troubleshoot, and manage PC settings on Windows, macOS, and Linux through natural language commands.GPL 3.0
- AlicenseAqualityFmaintenanceProvides an MCP server for local low-power screen vision, enabling AI agents to perform OCR and UI detection on inaccessible screens (games, remote desktops) using NPU acceleration and system OCR.51MIT
- FlicenseNot gradedqualityCmaintenanceEnables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.5-
- AlicenseBqualityAmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.4013 npmMIT