Most RDF servers make the agent step through query, read, decide, write — paying a round trip each time. Here ForEach and Filter live inside the JSON, so a SELECT can feed a loop that creates a resource per row in a single execution. The trade is that the agent has to get the whole program right before anything runs.
A composable operation system for Linked Data and SPARQL, exposed both as MCP tools and as a JSON DSL that nests operations inside each other.
- Linked Data verbs over HTTP — GET, PUT, POST and PATCH against RDF resources
- SPARQL operations — SELECT, CONSTRUCT and DESCRIBE, plus Substitute, Values and SPARQLString for building queries programmatically
- Schema extraction — ExtractClasses, ExtractDatatypeProperties, ExtractObjectProperties and ExtractOntology
- URI and string handling — ResolveURI, EncodeForURI, Concat, Replace, Str, STRUUID and URI
- Control flow inside the program — ForEach, Filter, Bindings, Current, Variable, Value, Merge and Execute, so a result set can drive the next step without a round trip
- LinkedDataHub operations such as ldh-CreateContainer, ldh-CreateItem, ldh-AddFile, ldh-AddSelect, ldh-AddResultSetChart and ldh-GeneratePortal
Uv, then uv venv and uv sync. Run it over stdio with uv run python -m web_algebra, or over Streamable HTTP with uvicorn at http://127.0.0.1:8000/mcp. Nothing is required for plain RDF work; OPENAI_API_KEY is needed only for the natural-language entry point, and CERT_PEM_PATH with CERT_PASSWORD only when authenticating to LinkedDataHub.
One command plus a key — uvx web-algebra, then supply credentials
