For builders

The identity primitive
for any AI surface.

One call. Your agent reads the person it is talking to. The body's read, compressed into a word, a rhythm, a force, a half-truth, a compliance lever. Patent pending. Yours to import.

Claude SDK Vercel AI SDK LangChain MCP REST

The four modes that matter

ModeWhat it returnsWhen to use it
system_promptClaude-ready system addendum tuned to the user.Prepend at every conversation start.
identity_tokenSigned JWT (HS256) carrying word, rhythm, force.Pass between services. Verify with /api/identity-verify.
scrubVoice-clean text. No em-dashes, no AI tells.Run on every model output before showing the user.
draftRewrite text in the user's compressed voice.When the user asks the agent to write something on their behalf.

REST. The thinnest path.

If your agent can do an HTTP request, you can use Noctara.

curl -X POST https://noctaracorp.com/api/mcp/system_prompt \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","style":"full"}'

Returns:

{
  "ok": true,
  "system_prompt": "# Identity context (Noctara behavioral read).\n\nYou are speaking to one person...",
  "has_read": true
}

MCP. For Claude Desktop, Cursor, Cline, OpenClaw.

One block in your MCP config and the seventeen Noctara modes are tools your model can call.

{
  "mcpServers": {
    "noctara": {
      "command": "npx",
      "args": ["-y", "noctara-mcp-server"],
      "env": {
        "NOCTARA_API_BASE": "https://noctaracorp.com/api",
        "NOCTARA_USER_EMAIL": "user@example.com",
        "NOCTARA_CLIENT_ID": "your-app"
      }
    }
  }
}

Full Claude install guide covers Desktop, Code, Cursor, Cline, and OpenClaw with the exact paths for each.

Official SDKs.

If you want a typed wrapper instead of raw fetch:

npm install @noctara/sdk
# or
pip install noctara

TypeScript:

import { Noctara } from "@noctara/sdk";

const noctara = new Noctara();
const { system_prompt } = await noctara.systemPrompt({ email: "user@example.com" });

Python:

from noctara import Noctara

n = Noctara()
sp = n.system_prompt(email="user@example.com")

Both SDKs are MIT-licensed. The patent does not encumber the SDK, only the underlying behavioral primitive.

Claude SDK (TypeScript). The cleanest example.

import Anthropic from "@anthropic-ai/sdk";

async function noctaraSystemPrompt(email: string) {
  const r = await fetch("https://noctaracorp.com/api/mcp/system_prompt", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ email, style: "full" }),
  });
  const j = await r.json();
  return j.system_prompt as string;
}

const claude = new Anthropic();
const identity = await noctaraSystemPrompt("user@example.com");

const msg = await claude.messages.create({
  model: "claude-opus-4-7",
  max_tokens: 1024,
  system: identity + "\n\n# Your task.\nYou are a helpful agent for this person.",
  messages: [{ role: "user", content: "What should I do tomorrow?" }],
});

Vercel AI SDK. Same shape.

import { generateText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";

const identity = await noctaraSystemPrompt(userEmail);

const { text } = await generateText({
  model: anthropic("claude-opus-4-7"),
  system: identity,
  prompt: userMessage,
});

LangChain (Python).

import httpx
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import SystemMessage, HumanMessage

def noctara_system_prompt(email: str) -> str:
    r = httpx.post(
        "https://noctaracorp.com/api/mcp/system_prompt",
        json={"email": email, "style": "full"},
    )
    return r.json()["system_prompt"]

llm = ChatAnthropic(model="claude-opus-4-7")
identity = noctara_system_prompt("user@example.com")
resp = llm.invoke([
    SystemMessage(content=identity),
    HumanMessage(content="What should I do tomorrow?"),
])

Identity tokens. For multi-service hand-off.

If your stack has more than one service, mint an identity_token once and verify it everywhere.

// service A: mint
const r = await fetch("https://noctaracorp.com/api/mcp/identity_token", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ email: "user@example.com", audience: "my-agent" }),
});
const { token } = await r.json();

// service B: verify
const v = await fetch("https://noctaracorp.com/api/identity-verify", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ token }),
});
const { valid, claims } = await v.json();
// claims.word, claims.rhythm, claims.force, claims.sub

Voice scrub. The cheapest thing in the stack.

Every model output runs through this before it hits the user.

const r = await fetch("https://noctaracorp.com/api/mcp/scrub", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ text: modelOutput }),
});
const { text } = await r.json();

Strips em-dashes, en-dashes, smart quotes, ellipsis chars, and the most reliable AI tells. The cleanup is invisible until your user notices their agent stopped sounding like an LLM.

Open source. Patent licensed for non-commercial use.

The SDK and reference implementation are on GitHub at github.com/noctara/sdk (MIT). The behavioral identity primitive itself is covered by US provisional patent application #64/048,624 (Systems and Methods for Behavioral Biometric Identity Assessment and Authentication, filed April 24, 2026). Non-commercial use is free. Commercial use at scale: cole@noctaracorp.com.

The pitch in one sentence

Every conversation with your AI starts cold. Yours doesn't have to.

The architecture compounds.
Claude install · OpenClaw install · The spec · GitHub