Logic Server

ai.nocturnus由 nocturnus.ai 发布v0.3.11更新于 Oct 24, 2026

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

已验证STDIO仅桌面知识与记忆AI 与机器学习

概览

AI 生成的概览

一个本地 MCP 服务器,为助手提供确定性的推理与记忆引擎,每轮只返回发生变化的事实上下文。

可以做什么
根据对话轮次和工具输出构建按重要性排序的工作事实集,README 建议每轮使用 context 工具。按目标驱动组装上下文,只返回从当前目标可达的事实。获取快照之间的差异,仅显示新增和移除的条目。在线程结束时清除会话中存储的上下文。存储事实与规则,支持反向链推理、证明链、真值维护和时间有效性。
适用场景
当助手反复重放很长的对话历史、你希望降低 token 用量同时保持业务事实一致时适合使用,例如多轮客服或需要撤回、更新事实的智能体流程。适合希望采用确定性推理而非向量检索或摘要的场景。
运行要求
作为桌面本地进程运行,通过 stdio 从 npm 包 nocturnusai-mcp 启动。环境变量:NOCTURNUSAI_API_KEY 用于认证访问,NOCTURNUSAI_DATABASE 指定数据库名,NOCTURNUSAI_TENANT 用于多租户隔离,NOCTURNUSAI_URL 指定 NocturnusAI 服务器的基础地址。自然语言抽取需要 LLM 提供方;未配置时自然语言轮次返回零条事实,但谓词语法无需 LLM 即可使用。
安装前请注意
需要 NOCTURNUSAI_API_KEY 密钥以及可访问的 NocturnusAI 服务器。对话轮次和工具输出会被发送到该服务器进行抽取,若配置了 LLM 提供方还会传给该模型,因此不要发送敏感数据。服务器会存储事实和会话上下文,并可清除会话,从而改变已存状态。README 的安装脚本会把远程脚本直接交给 shell 执行,建议改用软件包或容器方式安装。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Logic Server,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:README.md,提交 0dd449a

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.3.11最新Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。