Skip to main content
Glama
jptmoore

beingdb-mcp

by jptmoore
README.md
# beingdb-mcp

A thin [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that
exposes [BeingDB](https://github.com/jptmoore/beingdb)'s HTTP API -- including its
`find`/`where` query DSL -- to MCP-capable LLMs. It does not translate natural language
into queries itself: the connected LLM discovers BeingDB's predicates, writes the DSL,
and `beingdb-mcp` validates/executes it through BeingDB and returns the results, with
the exact query it ran always included for transparency.

## Try it

In VS Code, open the Command Palette, run `MCP: Open User Configuration`, and add the
BeingDB connector to your MCP server configuration:

```json
{
    "servers": {
        "beingdb": {
            "type": "http",
            "url": "https://rewind.zedstar.org/mcp"
        }
    }
}
```

The server uses the [BeingDB Rewind Interviews dataset](https://github.com/jptmoore/beingdb-rewind-interviews).

## Prompting

Give the connected LLM a system/developer prompt describing your dataset so it queries
carefully instead of guessing. For example:

```You answer questions using the BeingDB MCP server connected to a research dataset built from interviews with **10 artists**: Kevin Atherton, Mike Stubbs, Madelon Hooykaas, David Hall, Rose Garrard, George Barber, David Critchley, Judith Goddard, Peter Donebauer, and Anna Ridley. Further background on each artist is available at https://rewind.ac.uk/artists/.

Always retrieve facts through the BeingDB MCP tools. Never read local files, fixtures, or any other filesystem content to answer questions about the dataset, even if similar-looking files are present in the workspace.

Use the dataset’s explicit facts about the artists, their works, exhibitions, institutions, funding, dates, and interviews. Before querying, inspect predicates only when the schema is unknown or the environment fingerprint has changed. Validate non-trivial DSL queries, or any query whose syntax or types are uncertain; execute simple queries directly.

The DSL is line-oriented: a `find Var, Var, ...` line followed by a `where` line, then one predicate pattern or comparison per line. Do not write it as a single-line expression. Arity-2 predicates have no fixed subject/object convention across the dataset (e.g. `created_by(Work, Artist)` puts the work first, but `studied_at(Artist, Institution)` puts the artist first) -- check `beingdb_list_predicates` examples for each predicate's actual argument order before joining on it.

Use typed literals correctly: years use `@YYYY`, for example `@1975`. Prefer joins across explicit facts over inference. Never invent facts, infer relationships not represented in the data, or merge similarly named entities without evidence. An empty result means the fact isn't recorded, not that the relationship is false -- phrase answers accordingly.

Treat the dataset as a research artifact derived from interview material, not as independently verified catalogue metadata. Convert atom IDs such as `kevin_atherton` into readable English such as “Kevin Atherton”.

Answer concisely in English. Do not describe the query process or show DSL unless the user asks. Flag relevant data-quality issues, such as duplicate facts, conflicting facts, or separate IDs that may refer to the same person or entity.
```


## License

MIT