Logic Server

ai.nocturnusPublished by nocturnus.aiv0.3.11Updated Oct 24, 2026

Agent reasoning, memory, and token-optimized context for AI applications.

VerifiedSTDIODesktop onlyKnowledge & MemoryAI & ML

Overview

AI-generated overview

A local MCP server that gives an assistant a deterministic reasoning and memory engine, returning only the context facts that changed between turns.

What you can do
Build a salience-ranked working set of facts from conversation turns and tool output, using the context tool each turn as the README describes. Run goal-driven context assembly so only facts reachable from the current goal are returned. Fetch diffs between snapshots, showing only added and removed entries. Clear a session's stored context when a thread ends. Store facts and rules with backward-chaining inference, proof chains, truth maintenance and temporal validity.
When to use it
Worth adding when an assistant replays long conversation histories and you want to cut token use while keeping operational facts consistent, for example multi-turn support or agent workflows where facts get retracted or updated. It suits setups that want deterministic inference rather than vector search or summarization.
Requirements
Runs as a local process on the desktop, started from the npm package nocturnusai-mcp over stdio. Environment variables: NOCTURNUSAI_API_KEY for authenticated access, NOCTURNUSAI_DATABASE for the database name, NOCTURNUSAI_TENANT for tenant isolation, and NOCTURNUSAI_URL for the base URL of the NocturnusAI server. Natural-language extraction needs an LLM provider; without one, natural-language turns return zero facts, though predicate syntax works without an LLM.
Before you install
Requires the NOCTURNUSAI_API_KEY secret and a reachable NocturnusAI server. Conversation turns and tool output are sent to that server for extraction, and with an LLM provider configured they are also passed to that model, so avoid sending sensitive data. The server stores facts and session context and can clear sessions, which changes stored state. The README's install script pipes a remote script into a shell; prefer the package or container install.

Installation

In SourceWeft

  1. Open Logic Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

NocturnusAI

[CI] [PyPI] [npm] [Docker] [License: BUSL-1.1] [MCP]

The context engineering engine for AI agents: send only what changed.

[NocturnusAI — Context Engineering Engine for AI Agents]


Before / After

python
# ❌ Without NocturnusAI — replay everything, every turnmessages = system_prompt + full_history + tool_outputs   # ~1,259 tokens/turnresponse = llm(messages)                                 # $13,600/mo at scale
# ✅ With NocturnusAI — send only what changedctx = nocturnus.process_turns(raw_turns)                 # extract → infer → deltamessages = system_prompt + ctx.briefing_delta             # ~221 tokens/turnresponse = llm(messages)                                 # $2,400/mo. Same accuracy.

The Numbers

Measured on live APIs. 15-turn product support conversation. Real usage.input_tokens counts. Run it yourself.

Naive replayRAG-optimizedNocturnusAI
Tokens per turn~1,259~800~221
Cost per month (1K req/hr, Opus 4, $15/1M)$13,600$12,000$2,400
Latencyhighmediumlow
Truth-preservingnonoyes

Claude Opus 4: 5.7× reduction. Gemini 2.0 Flash: 10.0×. Full calculations.


Install

bash
pip install nocturnusai          # Pythonnpm install nocturnusai-sdk      # TypeScriptdocker run -p 9300:9300 ghcr.io/auctalis/nocturnusai:latest  # Docker

Or use the setup wizard:

bash
curl -fsSL https://raw.githubusercontent.com/Auctalis/nocturnusai/main/install.sh | bash

Why Developers Star This Repo

  • Reproducible token reduction — benchmark in the repo, methodology published, run it against your own workload
  • Deterministic inference — same query, same result, every time. No embedding drift, no cosine similarity lottery
  • Truth maintenance — retract a fact, all derived conclusions auto-retract. No stale context, no hallucination on operational state
  • Plugs into existing stacks — LangChain, LlamaIndex, CrewAI, AutoGen, MCP, Vercel AI SDK, OpenAI Agents SDK, Mastra
  • Benchmarkable against naive replay — numbers derived, not invented. Every claim traces to a notebook cell

Framework Quickstarts

FrameworkIntegrationLink
LangChain / LangGraphDrop-in NocturnusContextProvider, LangSmith trace pass-throughDocs
CrewAITask-scoped context per agent roleDocs
AutoGenContext server callable by any agentDocs
MCPSpec-compliant server for Claude Desktop, Cursor, ContinueConfig
OpenAI Agents SDKContext middleware, no tool modificationsDocs
Vercel AI SDKEdge-compatible adapter for Next.js, Nuxt, SvelteKitDocs
Python SDKpip install nocturnusaiDocs
TypeScript SDKnpm install nocturnusai-sdkDocs

How It Works

Three steps. Every turn.

  1. Extract — raw conversation turns → structured facts via LLM extraction
  2. Infer — backward-chaining logical inference finds only the facts reachable from the agent's current goal
  3. Return the delta — a briefingDelta containing only what changed since the last turn

This is not vector search. It is not summarization. It is deterministic inference on a logic engine — Hexastore indexing, backward chaining, and truth maintenance.


The Working Loop

LLM required for natural-language turns. The examples below send raw text turns through an LLM to extract structured facts. If you start the server without an LLM provider, natural-language turns will return zero facts. See Quick Start for setup options, or use predicate syntax (e.g., "customer_tier(acme_corp, enterprise)") which works without any LLM.

1. First reduction: POST /context

bash
curl -X POST http://localhost:9300/context \  -H 'Content-Type: application/json' \  -H 'X-Tenant-ID: default' \  -d '{    "turns": [      "user: Customer says they are enterprise and blocked on SLA credits.",      "tool: CRM says account is Acme Corp with a 2M ARR contract.",      "agent: Last week support promised to review SLA eligibility.",      "tool: Billing note says renewal is due next month."    ],    "maxFacts": 12  }'

2. Goal-driven pass: POST /memory/context

bash
curl -X POST http://localhost:9300/memory/context \  -H 'Content-Type: application/json' \  -H 'X-Tenant-ID: default' \  -d '{    "goals": [{"predicate":"eligible_for_sla","args":["acme_corp"]}],    "maxFacts": 12,    "sessionId": "ticket-42"  }'

3. Later turns: POST /context/diff

bash
curl -X POST http://localhost:9300/context/diff \  -H 'Content-Type: application/json' \  -H 'X-Tenant-ID: default' \  -d '{"sessionId": "ticket-42", "maxFacts": 12}'

Returns only added and removed entries between snapshots.

4. End of thread: POST /context/session/clear

bash
curl -X POST http://localhost:9300/context/session/clear \  -H 'Content-Type: application/json' \  -H 'X-Tenant-ID: default' \  -d '{"sessionId":"ticket-42"}'

Choose Your Surface

Python SDK
python
from nocturnusai import SyncNocturnusAIClient
with SyncNocturnusAIClient("http://localhost:9300") as client:    ctx = client.process_turns(        turns=[            "user: Customer says they are enterprise and blocked on SLA credits.",            "tool: CRM says account is Acme Corp with a 2M ARR contract.",        ],        scope="ticket-42",        session_id="ticket-42",    )
    diff = client.diff_context(session_id="ticket-42", max_facts=12)    client.clear_context_session("ticket-42")
    print(ctx.briefing_delta)
TypeScript SDK
ts
import { NocturnusAIClient } from 'nocturnusai-sdk';
const client = new NocturnusAIClient({  baseUrl: 'http://localhost:9300',  tenantId: 'default',});
const ctx = await client.processTurns({  turns: [    'user: Customer says they are enterprise and blocked on SLA credits.',    'tool: CRM says account is Acme Corp with a 2M ARR contract.',  ],  scope: 'ticket-42',  sessionId: 'ticket-42',});
const diff = await client.diffContext({ sessionId: 'ticket-42', maxFacts: 12 });await client.clearContextSession('ticket-42');console.log(ctx.briefingDelta);
MCP
json
{  "mcpServers": {    "nocturnus": {      "url": "http://localhost:9300/mcp/sse",      "transport": "sse"    }  }}

Use the context tool each turn for a salience-ranked working set. Pair MCP with the HTTP context endpoints when you need goal-driven assembly and diffs.


What Lives Behind The Workflow

When you do need backend mechanics, NocturnusAI provides them:

  • Deterministic fact and rule storage
  • Backward-chaining inference with proof chains
  • Truth maintenance and contradiction handling
  • Temporal facts with ttl, validFrom, and validUntil
  • Multi-tenancy via X-Database and X-Tenant-ID
  • MCP, REST, Python SDK, TypeScript SDK, and CLI surfaces over the same engine

Quick Start

Docker (fastest)

bash
docker run -d --name nocturnusai -p 9300:9300 \  --restart unless-stopped \  -v nocturnusai-data:/data \  ghcr.io/auctalis/nocturnusai:latest
bash
curl http://localhost:9300/health   # Verify it's running

Docker with Ollama (enables natural-language extraction)

bash
docker run -d --name nocturnusai -p 9300:9300 \  --add-host=host.docker.internal:host-gateway \  -e LLM_PROVIDER=ollama \  -e LLM_MODEL=granite3.3:8b \  -e LLM_BASE_URL=http://host.docker.internal:11434/v1 \  -e EXTRACTION_ENABLED=true \  ghcr.io/auctalis/nocturnusai:latest

From this repo

bash
make up-ollama && make smoke

CLI

bash
nocturnusai                                # Interactive REPLnocturnusai -e "context 10"               # Salience-ranked working setnocturnusai -e "compress"                 # POST /memory/compressnocturnusai -e "cleanup 0.05"             # POST /memory/cleanup

Documentation

Full docs: nocturnus.ai

Start HereThe turn-reduction workflow
Context WorkflowRaw turns → optimize → diff → clear
API ReferenceREST endpoints and response shapes
SDKsPython and TypeScript client methods
IntegrationsLangChain, CrewAI, AutoGen, MCP, and more
BenchmarkMeasured token reduction on live APIs
CalculationsEvery number, derived
How It WorksThe extraction → inference → delta pipeline

Docker Compose (advanced)

bash
git clone https://github.com/Auctalis/nocturnusai.git && cd nocturnusai
make up                                        # Server using .env.example defaultsmake up-ollama                                 # + Ollama (reuses host or starts bundled)make up-monitoring                             # + Prometheus + Grafanamake smoke                                     # Verify health + context endpoint

Build from Source

Requires JDK 17+.

bash
./gradlew :nocturnusai-server:run              # HTTP server on :9300./gradlew :nocturnusai-cli:run                 # Interactive REPL (JVM)./gradlew :nocturnusai-cli:nativeCompile       # Build native binary./gradlew test                                 # Full test suite

Contributing

See CONTRIBUTING.md. Issues labelled good first issue are good entry points.

Security

Report vulnerabilities privately via GitHub Security Advisories. See SECURITY.md.

License

Business Source License 1.1 (SPDX: BUSL-1.1). Free for internal use — including internal production — inside your own organization. Offering NocturnusAI or substantial functionality as a product/hosted service to third parties requires a commercial license ([email protected]). Converts to Apache 2.0 on 2030-02-19. See LICENSE and DISCLAIMER.md.


LEGAL & SAFETY NOTICE

NocturnusAI is a deterministic reasoning engine, but its output is only as reliable as the facts provided to it.

  1. No Warranty of Truth. "Verified" refers to logical consistency of inference, not accuracy of real-world claims.
  2. Not for Autonomous High-Stakes Decisions. Do not use this engine for unsupervised medical, financial, legal, or physical-safety decisions without an independent human verification step.
  3. Logic Layer Only. NocturnusAI provides information and inference; it does not execute actions.
  4. No Liability. See DISCLAIMER.md and LICENSE.

Source: README.md at commit 0dd449a

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.3.11LatestSep 16, 2026

Score

40% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.