Model any domain in 7 questions — a WQuestions MCP server.
Project description
wquestions-mcp
Model any domain in 7 questions.
An MCP server that lets Claude Desktop (or any MCP client) build and query a knowledge model of anything — a spa, a barbershop, a clinic, a bank — using one fixed set of tools. No per-domain schema to write, ever.
The problem
Every domain today gets its own bespoke ontology or database schema: a CRM schema for sales, a clinical model for a clinic, a different one again for a bank or a taxi dispatcher. None of it transfers between domains, and none of it was designed for an LLM to reason over — each new domain means new modeling work before an AI can even start answering questions about it.
WQuestions replaces all of that with a single fixed index: 7 axes that any fact, in any domain, answers. Model a domain by asserting facts on those 7 axes; query it the same way no matter what the domain is.
The 7 axes
| Axis | Question | Holds |
|---|---|---|
| Q | who | agents |
| O | what | objects, and reified situations (facts treated as things) |
| L | where | places |
| T | when | time points and intervals |
| N | how much | magnitudes with a unit |
| K | which / what kind | atemporal categories, types, states |
| M | how | the predicates that connect Q/O/L/T/N/K to each other — structural, not a value axis |
Quickstart
Add this to your Claude Desktop config (claude_desktop_config.json) and
restart Claude Desktop:
{
"mcpServers": {
"wquestions": {
"command": "uvx",
"args": ["wquestions-mcp"]
}
}
}
Prefer to run from source? Clone this repo and, from the repo root,
pip install -e . into a virtualenv (the engine is bundled — no other
package needed). Then point command/args at that venv's wquestions-mcp
script (e.g. command: ".../.venv/bin/wquestions-mcp", args: []) instead
of uvx.
Then ask Claude: "Load the spa example, then show me the model." See
DEMO.md for the full 30-second walkthrough.
Tools
| Tool | Does |
|---|---|
list_axes |
Describe the 7 axes |
list_roles |
List canonical roles (who/what/where/... connectors), typed by domain and range |
add_entity |
Create an individual on a value axis (Q, O, L, T, N, K); for the N axis pass value + unit (a K entity id or inline spec) — a magnitude without a unit is rejected |
define_verb |
Register a situation type and its roles — optional, assert_situation auto-registers unknown verbs |
assert_situation |
Assert a fact: reify a situation and attach its roles |
correct |
Correct/update a role on an existing situation by re-asserting it (append-only; ask returns the latest, history=true shows the trail) |
ask |
Query by projection — fix some roles, ask for others, optionally as of a point in time; pass history=true for the full time-ordered trail instead of just the current value |
show_model |
Dump the current universe: every entity and fact |
load_example |
Load a prebuilt demo universe (spa) to try queries instantly |
reset |
Clear the model and start a fresh universe |
How it works
The LLM client does the natural-language-to-structure step: it reads "Diego
cut Marco's hair at Barber Kings on 2025-06-11" and turns it into
role-labeled arguments (agente: diego, paciente: marco, lugar_de: barber_kings). The server never parses English — it takes those roles,
validates them against the 7-axis model, and runs ingest and query over the
wq engine. Same engine, same 10 tools, whether the domain behind them is a
spa or a barbershop.
Persistence
By default the server persists your universe to an append-only log and reloads on restart, so a modeled domain survives across sessions — you never rebuild by hand. Nothing is ever overwritten; corrections are appended and the log is the source of truth.
- Default location:
~/.wquestions/universe.jsonl. - Choose a file: set
WQUESTIONS_LOG=/path/to/domain.jsonl. Point each domain at its own file (e.g. one per MCP server entry in your client config) — a single log holds one live universe at a time (aresetstarts a fresh domain within it). - Turn it off (pure in-memory):
WQUESTIONS_LOG=off.
show_model reports the active log path and how many events were replayed, so
you can confirm persistence is on.
Further reading
The 7-axis model — why it's fixed, what each axis actually commits to, and how it holds up once you push on it — is worked out in full in WQuestions, the book this project comes from (Spanish). Start with Chapter 8, El espacio multidimensional for the axis model itself, or the table of contents.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wquestions_mcp-0.2.0.tar.gz.
File metadata
- Download URL: wquestions_mcp-0.2.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
221087eeed9948e44c4c9aee15b0908b918b0549f7bb31d9f8c87e5ca61784d6
|
|
| MD5 |
db0fc9ffe3c6792b81807491c835e5bb
|
|
| BLAKE2b-256 |
8f3c6379a89e9cec9a1bdf1f25fb4f734b722836d9caf8e5e96dc2919af4c383
|
File details
Details for the file wquestions_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: wquestions_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 28.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1868126c4b64a7063c2e1c5d827a1a3de7be79a5749701d07f1b3e18a13dd4d0
|
|
| MD5 |
8e09c9a278ec7639569acda783a4636f
|
|
| BLAKE2b-256 |
287ce32565ddbb71d3775012d5180893db3cfda785eb2a170c2575b92b9a32ef
|