Query the BHSA Hebrew Bible in plain language, and keep the query.
shebanq-mcp is a front door to the BHSA, the ETCBC's linguistic database of the Hebrew Bible. You ask in plain language; the answer is a real, runnable, citable query in two languages, with its results. The query stays in your hands the whole way.
It serves three kinds of work:
vs. That a
verb lexeme carries a trailing [. That gender is encoded on
the word as a form, so "feminine plural nouns" counts forms, which may
differ from what a grammar means by gender. Watching real queries form
from your own questions, with every feature visible and validated, teaches
that mapping faster than any manual.One honest caution, because it is the most important thing on this page: a query can be perfectly valid and still encode a different question than you meant. Validation catches malformed queries; it cannot catch a faithful answer to the wrong question. That is why the query is always shown, why the examples carry engine-verified counts, and why a conversion that would change a query's meaning is refused with the reason. Read the query before you cite it. This tool is built to make that reading easy. Each answer also lists what its query assumes about BHSA's encoding, so a valid query that answers a slightly different question than you meant is caught before it is cited.
Type a question the way you would ask a colleague: "all feminine plural nouns", "where does bara occur?". Click Translate to MQL and the generated query appears, editable, before anything runs. Read it. Change it if you like. Then Run query executes it against the BHSA and the results come back with vocalized Hebrew, glosses, and counts. Beside every MQL query the answer also shows its Text-Fabric equivalent, derived by plain code, for scholars who work in notebooks.
The reference checkbox wraps the query in a verse block so each hit carries its book, chapter, and verse. Untick it for the plain form. Toggling never re-translates; it switches between the two forms of the same query.
Every query comes with a plain-language reading. A one-sentence summary says what the whole query looks for, and How this query works breaks it down part by part: each object block, each feature and value, the rule that enumerated codes are unquoted and free text is quoted, and the GET clause. It is composed from the query itself by plain code, with no model, so it cannot drift from what the query actually says. Beside it, a short note lists what the query assumes about BHSA's encoding, so a valid query that answers a slightly different question than you meant is caught before you cite it.
Some questions name a meaning rather than a single word: "a verb of motion", "words for fear". There is no one lexeme for these, so the translator answers by assembling a set of lexemes joined with OR. That set is the model's guess. The BHSA, as queried here, has no semantic-field feature, so there is no authoritative list to check the set against, and a wrong or non-existent member can slip in. So the set is shown in full: each lexeme with its dictionary gloss and how often it occurs in the corpus, with members that are not real BHSA lexemes flagged and left unticked. Untick the ones that do not belong, keep the ones that do, and re-run the curated set. The model proposes; you judge and keep.
Nothing is saved automatically. When a query is right, click Save to record it to your history: a Recent tab of everyone's questions and a My translations tab of your own, each with a shareable permalink that reopens and re-runs the query. Only a valid query can be saved, so a set with a flagged lexeme has to be corrected first. This keeps the history a record of queries you read and kept, not of every first draft.
Check MQL (in the top navigation) takes a query you
paste or write and checks it without running anything. A valid query is
described back in plain language; a malformed one is reported with exactly
what is wrong and, where possible, a suggested correction. The check and the
description are plain code; any suggested correction is generated by the model,
marked as such, and re-validated before it is shown. A lexeme the database
does not contain (the common slip is a missing part-of-speech suffix, so the
divine name is lex='JHWH/', not 'JHWH') is caught
here too, against the full BHSA lexeme inventory.
Two buttons on any result turn a query into a research answer. Distribution is a per-book count of where the phenomenon concentrates across the Bible, computed exactly over the whole result set rather than the displayed sample, and it carries the export: the full result set to CSV or the clipboard with the book chapter:verse reference. Concordance shows each hit in its full verse with the matched word highlighted, paged with a Load more button. A result too large to export still shows where it clusters and reads in context; an oversized export is refused plainly rather than returning a partial, corpus-biased sample.
A question that asks how many times or how often a word or construction occurs reports the number of occurrences of the pattern, not the number of matched word rows, counted from the query's core pattern. Asking for the matches themselves still returns the rows.
The TF → MQL converter (link at the top) exists for citation. Work in your Text-Fabric notebook, paste your search template into the converter, and take the resulting MQL to SHEBANQ: save it there and you have a permanent link you can cite in print, one your readers can click and re-run. The conversion is deterministic, plain code with no AI involved, so the same input always gives the same output. A template using constructs MQL cannot express is refused with a plain explanation, never converted approximately. Note the data version when you cite: this server is pinned to ETCBC 2021.
The same engine is a remote
MCP endpoint:
https://shebanq-mcp.onrender.com/mcp. Add it in
Claude.ai under Settings → Connectors → Add custom connector, or
bridge it with mcp-remote in any client that loads local
servers.
The tools, one line each:
search_bhsa(question): plain language in, a citable
query in both languages plus results out.run_mql(mql): validate and run an MQL query you
already have.run_tf(template): validate and run a Text-Fabric
search template.to_citable_mql(template): Text-Fabric template in,
SHEBANQ-citable MQL out. No model involved.to_tf_template(mql): the mirror; MQL in, Text-Fabric
template out.lookup_feature(name): a BHSA feature's meaning and
valid values.Generative AI can draft a database query from a plain-language question. That raises a fair worry for scholarship: if a machine writes the query, does the scholar still learn anything? This project takes a position. The translation was never the whole of the work. The scholarly act is judging whether a query faithfully captures a form-to-function question, and reading what a result does and does not show. So the design keeps the query visible and central:
vs=niphal (the correct code is
vs=nif) fails loudly with the reason, instead of
silently returning zero. That catalogue is itself generated from the
engine (its object types, kinds, and the values that actually occur in
the data) and kept in step by a round-trip test, so what a query is
checked against is the engine's own structure, not a hand-kept list. The
lexemes are checked the same way: lex is a closed vocabulary,
so a query naming a lexeme the database does not contain is rejected before
it runs, against the full inventory dumped from the engine.AI as a way in, not a way around.
The linguistic data is the BHSA (ETCBC 2021), created and maintained by the Eep Talstra Centre for Bible and Computer. Queries run on the Emdros text database engine and on Text-Fabric. SHEBANQ hosts the citable saved queries this project links into.
Built by Jose Fresco Benaim, archived with DOI 10.5281/zenodo.20625355.