Mquery
FreeNot checkedAn HTTP API and MCP server for mining language corpora using Manatee-Open engine.
About
An HTTP API and MCP server for mining language corpora using Manatee-Open engine.
README
MQuery is an HTTP API server for mining language corpora using Manatee-Open engine. Unlike other Manatee-based solutions, MQuery uses more fine-tuned C bindings without relying on SWIG, and naturally leverages a worker queue architecture for efficient query processing and scalability. It also ships an MCP server (see MCP Support) so LLM agents can query corpora directly.
Running with Docker (Easiest Method)
The simplest way to run MQuery is using Docker Compose, which automatically sets up the server, worker, and Redis:
Prerequisites
Quick Start
Clone the repository:
git clone https://github.com/czcorpus/mquery.git cd mqueryCreate a Docker configuration file
conf-docker.jsonbased onconf.sample.json:cp conf.sample.json conf-docker.jsonEdit
conf-docker.jsonto match your setup:- Set
listenAddressto0.0.0.0(to accept connections from outside the container) - Set
listenPortto8989 - Set Redis host to
redis(the service name in docker-compose.yml) - Configure your corpora paths:
registryDir:/var/lib/manatee/registrysplitCorporaDir:/var/lib/manatee/split
- Set
Place your corpus data and registry files in directories that will be mounted:
- The docker-compose setup creates volumes for corpus data at
/var/lib/manatee - You can modify the volume mounts in
docker-compose.ymlto point to your existing corpus directories
- The docker-compose setup creates volumes for corpus data at
Start the services:
docker-compose up -dAccess the API at
http://localhost:8989
Docker Architecture
The Docker Compose setup includes:
- mquery-server: HTTP API server (port 8989)
- mquery-worker: Background worker for processing corpus queries
- redis: Redis database for job queuing and results caching
Managing the Services
- View logs:
docker-compose logs -f - Stop services:
docker-compose down - Rebuild after code changes:
docker-compose up -d --build
Manual Installation
If you prefer to install MQuery manually without Docker:
Requirements
- a working Linux server with installed Manatee-open library
- Redis database
- Go language compiler and tools
- (optional) an HTTP proxy server (Nginx, Apache, ...)
How to install
- Install
Golanguage environment, either via a package manager or manually from Go download page- make sure
/usr/local/go/binand~/go/binare in your$PATHso you can run any installed Go tools without specifying a full path
- make sure
- Install Manatee-open from the download page. No specific language bindings are required.
configure --with-pcre --disable-python && make && sudo make install && sudo ldconfig
- Get MQuery sources (
git clone --depth 1 https://github.com/czcorpus/mquery.git) - Run
./configure - Run
make - Run
make install- the application will be installed in
/opt/mquery - for data and registry,
/var/opt/corpora/dataand/var/opt/corpora/registrydirectories will be created - systemd services
mquery-server.serviceandmquery-worker-all.targetwill be created
- the application will be installed in
- Copy at least one corpus and its configuration (registry) into respective directories (
/var/opt/corpora/data,/var/opt/corpora/registry) - Update corpora entries in
/opt/mquery/conf.jsonfile to match your installed corpora - start the service:
systemctl start mquery-serversystemctl start mquery-worker-all.target
Authentication
MQuery supports optional token-based authentication via a configurable HTTP header. When enabled, every request must include the header with a valid token.
Relevant configuration fields in conf.json:
{
"authHeaderName": "X-API-Key",
"authTokens": [
"sha256:a3f1c8d2...",
"sha256:9e107d9d..."
],
"localNetworks": [
"127.0.0.0/8",
"192.168.1.0/24"
],
"knownProxies": [
"192.168.1.10"
]
}
Tokens in authTokens can be stored either as plaintext (not recommended) or as SHA-256 hashes prefixed with sha256: (recommended).
Generating a hashed token
Choose a secret token (use a long random string):
openssl rand -hex 32 # example output: 4a7b9c2e1f3d8a6b...Hash it for storage in
conf.json:echo -n "your-secret-token" | sha256sum | awk '{print "sha256:" $1}' # output: sha256:a3f1c8d2...Paste the
sha256:...value intoauthTokensin your config.
Clients send the original (unhashed) token in the configured header:
X-API-Key: your-secret-token
Requests from IPs within any localNetworks CIDR range are exempt from auth token checks, provided the source IP is not also listed in knownProxies. If localNetworks is not set, only the exact listenAddress is treated as local.
If a reverse proxy shares an IP with a local network (e.g. runs on the same host), add its IP to knownProxies to ensure its forwarded requests still require auth.
API
For the most recent API Docs, please see https://korpus.cz/mquery-test/docs/
MCP Support
MQuery ships a separate mqmcp binary (cmd/mqmcp) exposing corpus querying as MCP tools, so LLM agents can call the MQuery API directly. It acts as a thin client that translates MCP tool calls into HTTP requests against a running MQuery API instance.
Available tools:
corpus_info,concordance,term_frequency,freqs,collocations,text_types,text_types_overview,text_types_avail_values.
It is built alongside the main binary by make build (output: ./mqmcp) and run in one of two modes, selected via the MODE env var:
stdio(default) - for local MCP clients (e.g. desktop AI assistants); talks tohttps://www.korpus.cz/mqueryunless overriddenhttp- runs a Streamable HTTP MCP server for shared/remote deployments
Configuration can be provided via a JSON config file (CONF_PATH env var) and/or environment variables:
MQUERY_API_URL- MQuery API base URL (required inhttpmode)MQUERY_API_HEADER_<NAME>- forwards a header to the MQuery API, e.g.MQUERY_API_HEADER_X_API_KEY=secretsendsX-Api-Key: secret(useful for the token-based authentication described above)LISTEN_ADDRESS- listen address (required inhttpmode)LOG_PATH/LOG_LEVEL- logging destination and level (stdiomode logs to a file by default; setLOG_PATH=stderrto log to stderr instead)
Example config file:
{
"apiUrl": "http://localhost:8989",
"apiHeaders": {
"X-Api-Key": "your-secret-token"
},
"server": {
"listenAddress": "0.0.0.0:8990"
},
"logging": {
"level": "info"
}
}
Installing Mquery
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/czcorpus/mqueryFAQ
Is Mquery MCP free?
Yes, Mquery MCP is free — one-click install via Unyly at no cost.
Does Mquery need an API key?
No, Mquery runs without API keys or environment variables.
Is Mquery hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Mquery in Claude Desktop, Claude Code or Cursor?
Open Mquery on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Mquery with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
