John CEO Agentic Memory

John CEO Agentic Memory

MCP server that gives AI agents persistent, tenant-scoped memory with semantic search and consolidation, using CockroachDB vector indexes and Amazon Bedrock embeddings.

Category
访问服务器

README

John CEO Agentic Memory

John CEO Agentic Memory is the open-source memory layer for John CEO - a private AI coworker with a dedicated workspace per customer. This repo is our CockroachDB x AWS hackathon submission: MCP tools, CockroachDB native vector indexing, and Amazon Bedrock on AWS Lambda.

Long-term memory for AI agents, backed by CockroachDB (native VECTOR + distributed vector index) and Amazon Bedrock, exposed over the Model Context Protocol (MCP).

Hackathon: CockroachDB x AWS - Build with Agentic Memory. Product: https://john.ceo. License: MIT.

Agents feel sharp inside one conversation and amnesiac across sessions. John CEO needs memory that accumulates, retrieves within a limited context window, and forgets what is outdated - with production-grade persistence on CockroachDB Cloud and serverless execution on AWS Lambda.

Architecture

flowchart LR
  agent["MCP client / agent"] -->|"POST /mcp Bearer"| lambda["AWS Lambda Function URL"]
  lambda --> svc["MemoryService"]
  svc -->|"embed + analyze"| bedrock["Amazon Bedrock"]
  svc -->|"VECTOR + hybrid SQL"| crdb["CockroachDB Cloud"]
  cursor["Cursor / Claude Code"] -->|"read-only audit"| managedMcp["Cockroach Managed MCP"]
  managedMcp --> crdb
  ccloud["ccloud CLI"] -.->|"provision + schema"| crdb

See also docs/architecture.mmd.

CockroachDB tools used

Tool How this project uses it
Distributed Vector Indexing memories.embedding VECTOR(1024) + VECTOR INDEX (user_id, status, embedding vector_cosine_ops). Every semantic search is an ANN scan through this index, pre-filtered by the (user_id, status) prefix so one deployment serves many tenants. Verified with EXPLAIN - see Vector index verification.
Cloud Managed MCP Server Read-only audit path from Cursor/Claude Code via https://cockroachlabs.cloud/mcp. See docs/managed-mcp.md.
ccloud CLI scripts/ccloud-bootstrap.sh provisions/attaches the cluster, creates DB/user, applies schema.sql, then grants least privilege.
Agent Skills Four skills from cockroachlabs/cockroachdb-skills changed this code: retry backoff/jitter and idempotent session counters, statistics-aware index validation, least-privilege grants, and schema/type design. Each change is traced in docs/skills-used.md.

AWS services used

Service How
AWS Lambda Stateless MCP HTTP handler + Function URL (POST /mcp, GET / landing).
Amazon Bedrock Titan Text Embeddings V2 (1024-d) + Amazon Nova Lite (analyze/consolidate). Optional Claude via inference profile after Anthropic use-case form.
AWS Secrets Manager Bearer token + bound userId for ACL (see deploy script).

Quick start (local, offline)

npm install
npm run demo          # no cloud credentials needed
npm test
npm run typecheck
npm run seed:demo     # populate demo-user for EXPLAIN / video (needs DATABASE_URL)

Copy .env.example to .env. With USE_FAKE_BEDROCK=1 the server uses a deterministic local intelligence (still 1024-d vectors to match the schema).

npm run build
MCP_TRANSPORT=stdio npm start

HTTP mode:

MCP_TRANSPORT=http PORT=8080 USE_FAKE_BEDROCK=1 npm start
curl -s http://localhost:8080/ | jq .

MCP tools

Tool Purpose
memory_write Persist a durable memory (Bedrock summary/tags/salience/kind)
memory_search Top-k semantic recall (Cockroach vector index when configured)
memory_recall_context Pack critical memories into a token budget
memory_forget Consolidate related memories + decay stale ones

All memories are namespaced by userId. When MCP_AUTH_TOKEN is set, the server forces MCP_AUTH_USER_ID (token-bound ACL).

Storage

  • MEMORY_STORE=memory - ephemeral (tests/demo)
  • MEMORY_STORE=file - JSON file (local default)
  • MEMORY_STORE=cockroach - CockroachDB Cloud via DATABASE_URL

Schema: schema.sql. Embedding dimension is locked at 1024 (Amazon Titan Text Embeddings V2 default).

Vector index verification

Two details decide whether the vector index is actually used, and both are easy to get wrong silently.

Opclass must match the distance operator. The index is declared with vector_cosine_ops because search orders by cosine distance (<=>). With the default vector_l2_ops, CockroachDB accelerates only <->, and the same query falls back to a full primary-key scan. Measured on v26.2.5 over 2000 rows:

-- vector_cosine_ops (current schema), ORDER BY embedding <=> $2
-- plan excerpt, ASCII-rendered:
  vector search
    table: memories@idx_memories_user_embedding
    prefix spans: [/'u1'/'active' - /'u1'/'active']

-- default vector_l2_ops, same cosine query:
  top-k
    scan
      table: memories_l2@memories_l2_pkey     <-- index unused

Only prefix columns may be filtered. Adding a non-prefix predicate such as a created_at_ms >= x recency bound disqualifies the index: CockroachDB raises SQLSTATE 42809 if you hint it, and otherwise silently plans a full scan. The recency window is therefore applied in MemoryService after retrieval, which keeps ANN acceleration on every search path and makes recencyDays behave identically for the file and in-memory stores.

Note that a vector index will not appear in query plans on an empty or unanalyzed table - the optimizer picks a plain scan until statistics exist. Test index behavior against representative data, not an empty schema.

Cloud setup

  1. CockroachDB - reuse an existing cluster or run bash scripts/ccloud-bootstrap.sh (set CRDB_CLUSTER_NAME if not using the default agentic-memory). For password-based non-interactive SQL, install the cockroach CLI and set CRDB_ADMIN_USER / CRDB_ADMIN_PASSWORD before running the script.
  2. Managed MCP - enable in Cloud Console for your cluster; follow docs/managed-mcp.md.
  3. AWS Lambda - bash deploy/deploy-lambda.sh (see deploy/README.md).

Live demo (staging)

Item Value
Demo URL https://l4ohjmgz52.execute-api.eu-central-1.amazonaws.com/
MCP path POST /mcp with Bearer token (stored in Secrets Manager agentic-memory-mcp/auth)
Cockroach cluster existing Serverless cluster (aws-eu-west-1)
Lambda region eu-central-1

Amazon Bedrock in eu-central-1

Model Role Setup
amazon.titan-embed-text-v2:0 Embeddings (1024-d) Works out of the box
eu.amazon.nova-lite-v1:0 Analyze / consolidate (default chat) Works out of the box
eu.anthropic.claude-haiku-4-5-20251001-v1:0 Optional chat upgrade Requires the one-time Anthropic use-case form in the Bedrock console (Model access)

You do not need Claude 3.5 Haiku specifically - it is not offered as a direct on-demand model in Frankfurt. The defaults above are sufficient for the hackathon demo.

Security

  • Bearer auth on HTTP/Lambda (MCP_AUTH_TOKEN or Secrets Manager).
  • Token-bound userId - clients cannot query another tenant's rows.
  • Least-privilege SQL user (DML only on memories / sessions).
  • Managed MCP kept read-only for operator audit.
  • TLS everywhere (sslmode=verify-full on CockroachDB Cloud).
  • Structured JSON logs include request id / tool / latency / row counts - never memory content.

What happens when things go wrong

  • Serialization failure (SQLSTATE 40001): retried up to 3 times with exponential backoff plus jitter, so colliding writers do not retry in lockstep. A 40001 means CockroachDB already aborted the transaction, so replaying the unit of work is always safe.
  • Connection loss / ambiguous commit (08xxx, 57P01): also retried. This is safe only because every statement is idempotent - memory rows upsert on a client-generated primary key, and sessions.memory_count is derived with COUNT(*) rather than incremented, so a replay cannot double-count.
  • Unmigrated database: startup fails fast with the missing table names instead of erroring inside the first tool call.
  • Lambda timeout: keep tool work bounded; Function timeout defaults to 60s in the deploy script.
  • Bedrock / network errors: surfaced as MCP tool errors; fake mode available for offline demos.

Example MCP client config (local stdio)

{
  "mcpServers": {
    "agentic-memory": {
      "command": "node",
      "args": ["dist/index.js"],
      "env": {
        "USE_FAKE_BEDROCK": "1",
        "MEMORY_STORE": "file"
      }
    }
  }
}

Submission checklist

See also docs/HUMAN-CHECKLIST.md, docs/SUBMISSION.md, docs/DEVPOST.md, and docs/RESULTS.md.

  • [x] Public repo, MIT license visible in About
  • [x] README lists CockroachDB tools (Vector Indexing, Managed MCP, ccloud, Agent Skills)
  • [x] README lists AWS services (Lambda, Bedrock, Secrets Manager, API Gateway)
  • [x] Public demo URL responds (GET /)
  • [ ] Video < 3 min (script: docs/VIDEO-SCRIPT.md)
  • [x] npm run hygiene:grep clean
  • [ ] Devpost form: paste from docs/DEVPOST.md, video linked, repo linked

License

MIT - see LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选